1/* Copyright 2009-2013 Yorba Foundation
2 *
3 * This software is licensed under the GNU LGPL (version 2.1 or later).
4 * See the COPYING file in this distribution.
5 */
6
7[CCode (
8    cprefix="GP",
9    lower_case_cprefix="gp_"
10)]
11namespace GPhoto {
12    [SimpleType]
13    [CCode (
14        cname="CameraAbilities",
15        destroy_function="",
16        cheader_filename="gphoto2/gphoto2-abilities-list.h"
17    )]
18    public struct CameraAbilities {
19        public string model;
20        public int status;
21        public PortType port;
22        public string speed;
23        public CameraOperation operations;
24        public CameraFileOperation file_operations;
25        public CameraFolderOperation folder_operations;
26        public int usb_vendor;
27        public int usb_product;
28        public int usb_class;
29        public int usb_protocol;
30    }
31
32    [Compact]
33    [CCode (
34        cname="CameraAbilitiesList",
35        cprefix="gp_abilities_list_",
36        free_function="gp_abilities_list_free",
37        cheader_filename="gphoto2/gphoto2-abilities-list.h"
38    )]
39    public class CameraAbilitiesList {
40        [CCode (cname="gp_abilities_list_new")]
41        public static Result create(out CameraAbilitiesList abilitiesList);
42        public Result load(Context context);
43        public Result reset();
44        public Result detect(PortInfoList portList, CameraList cameraList, Context context);
45        public int count();
46        public int lookup_model(string model);
47        public Result get_abilities(int index, out CameraAbilities abilities);
48    }
49
50    [Compact]
51    [CCode (
52        cname="Camera",
53        ref_function="GPHOTO_REF_CAMERA",
54        unref_function="gp_camera_unref",
55        free_function="gp_camera_free",
56        cheader_filename="gphoto2/gphoto2-camera.h,gphoto.h"
57    )]
58    public class Camera {
59        [CCode (cname="gp_camera_new")]
60        public static Result create(out Camera camera);
61        public Result init(Context context);
62        public Result exit(Context context);
63        public Result get_port_info(out PortInfo info);
64        public Result set_port_info(PortInfo info);
65        public Result get_abilities(out CameraAbilities abilities);
66        public Result set_abilities(CameraAbilities abilities);
67        public Result get_storageinfo(CameraStorageInformation **sifs, out int count, Context context);
68
69        // Folders
70        [CCode (cname="gp_camera_folder_list_folders")]
71        public Result list_folders(string folder, CameraList list, Context context);
72        [CCode (cname="gp_camera_folder_list_files")]
73        public Result list_files(string folder, CameraList list, Context context);
74        [CCode (cname="gp_camera_folder_delete_all")]
75        public Result delete_all_files(string folder, Context context);
76        [CCode (cname="gp_camera_folder_put_file")]
77        public Result put_file(string folder, CameraFile file, Context context);
78        [CCode (cname="gp_camera_folder_make_dir")]
79        public Result make_dir(string folder, string name, Context context);
80        [CCode (cname="gp_camera_folder_remove_dir")]
81        public Result remove_dir(string folder, string name, Context context);
82
83        // Files
84        [CCode (cname="gp_camera_file_get_info")]
85        public Result get_file_info(string folder, string file, out CameraFileInfo info, Context context);
86        [CCode (cname="gp_camera_file_set_info")]
87        public Result set_file_info(string folder, string file, CameraFileInfo info, Context context);
88        [CCode (cname="gp_camera_file_get")]
89        public Result get_file(string folder, string filename, CameraFileType type, CameraFile file,
90            Context context);
91        [CCode (cname="gp_camera_file_delete")]
92        public Result delete_file(string folder, string filename, Context context);
93    }
94
95    [Compact]
96    [CCode (
97        cname="CameraFile",
98        cprefix="gp_file_",
99        ref_function="GPHOTO_REF_FILE",
100        unref_function="gp_file_unref",
101        free_function="gp_file_free",
102        cheader_filename="gphoto2/gphoto2-file.h,gphoto.h"
103    )]
104    public class CameraFile {
105        [CCode (cname="gp_file_new")]
106        public static Result create(out CameraFile file);
107        public Result get_data_and_size(out uint8 *data, out ulong data_len);
108        public Result save(string filename);
109        public Result slurp(uint8[] data, out size_t readlen);
110    }
111
112    [SimpleType]
113    [CCode (
114        cname="CameraFileInfo",
115        destroy_function="",
116        cheader_filename="gphoto2/gphoto2-filesys.h"
117    )]
118    public struct CameraFileInfo {
119        public CameraFileInfoPreview preview;
120        public CameraFileInfoFile file;
121        public CameraFileInfoAudio audio;
122    }
123
124    [SimpleType]
125    [CCode (
126        cname="CameraFileInfoAudio",
127        cheader_filename="gphoto2/gphoto2-filesys.h"
128    )]
129    public struct CameraFileInfoAudio {
130    }
131
132    [CCode (
133        cname="CameraFileInfoFields",
134        cheader_filename="gphoto2/gphoto2-filesys.h",
135        cprefix="GP_FILE_INFO_"
136    )]
137    [Flags]
138    public enum CameraFileInfoFields {
139        NONE,
140        TYPE,
141        NAME,
142        SIZE,
143        WIDTH,
144        HEIGHT,
145        PERMISSIONS,
146        STATUS,
147        MTIME,
148        ALL
149    }
150
151    [SimpleType]
152    [CCode (
153        cname="CameraFileInfoFile",
154        cheader_filename="gphoto2/gphoto2-filesys.h"
155    )]
156    public struct CameraFileInfoFile {
157        public CameraFileInfoFields fields;
158        public CameraFileStatus status;
159        public ulong size;
160        public string type;
161        public uint width;
162        public uint height;
163        public string name;
164        public CameraFilePermissions permissions;
165        public time_t mtime;
166    }
167
168    [SimpleType]
169    [CCode (
170        cname="CameraFileInfoPreview",
171        cheader_filename="gphoto2/gphoto2-filesys.h"
172    )]
173    public struct CameraFileInfoPreview {
174        public CameraFileInfoFields fields;
175        public CameraFileStatus status;
176        public ulong size;
177        public string type;
178        public uint width;
179        public uint height;
180        public string name;
181        public CameraFilePermissions permissions;
182        public time_t mtime;
183    }
184
185    [CCode (
186        cname="CameraFileOperation",
187        cheader_filename="gphoto2/gphoto2-abilities-list.h",
188        cprefix="GP_FILE_OPERATION_"
189    )]
190    [Flags]
191    public enum CameraFileOperation {
192        NONE,
193        DELETE,
194        PREVIEW,
195        RAW,
196        AUDIO,
197        EXIF
198    }
199
200    [CCode (
201        cname="CameraFilePermissions",
202        cheader_filename="gphoto2/gphoto2-filesys.h",
203        cprefix="GP_FILE_PERM_"
204    )]
205    [Flags]
206    public enum CameraFilePermissions {
207        NONE,
208        READ,
209        DELETE,
210        ALL
211    }
212
213    [CCode (
214        cname="CameraFileStatus",
215        cheader_filename="gphoto2/gphoto2-filesys.h",
216        cprefix="GP_FILE_STATUS_"
217    )]
218    public enum CameraFileStatus {
219        NOT_DOWNLOADED,
220        DOWNLOADED
221    }
222
223    [CCode (
224        cname="CameraFileType",
225        cheader_filename="gphoto2/gphoto2-file.h",
226        cprefix="GP_FILE_TYPE_"
227    )]
228    public enum CameraFileType {
229        PREVIEW,
230        NORMAL,
231        RAW,
232        AUDIO,
233        EXIF,
234        METADATA
235    }
236
237    [CCode (
238        cname="CameraFolderOperation",
239        cheader_filename="gphoto2/gphoto2-abilities-list.h",
240        cprefix="GP_FOLDER_OPERATION_"
241    )]
242    [Flags]
243    public enum CameraFolderOperation {
244        NONE,
245        DELETE_ALL,
246        PUT_FILE,
247        MAKE_DIR,
248        REMOVE_DIR
249    }
250
251    [Compact]
252    [CCode (
253        cname="CameraList",
254        cprefix="gp_list_",
255        ref_function="GPHOTO_REF_LIST",
256        unref_function="gp_list_unref",
257        free_function="gp_list_free",
258        cheader_filename="gphoto2/gphoto2-list.h,gphoto.h"
259    )]
260    public class CameraList {
261        [CCode (cname="gp_list_new")]
262        public static Result create(out CameraList list);
263        public int count();
264        public Result append(string name, string value);
265        public Result reset();
266        public Result sort();
267        public Result find_by_name(out int? index, string name);
268        public Result get_name(int index, out unowned string name);
269        public Result get_value(int index, out unowned string value);
270        public Result set_name(int index, string name);
271        public Result set_value(int index, string value);
272        public Result populate(string format, int count);
273    }
274
275    [CCode (
276        cname="CameraOperation",
277        cheader_filename="gphoto2/gphoto2-abilities-list.h",
278        cprefix="GP_OPERATION_"
279    )]
280    [Flags]
281    public enum CameraOperation {
282        NONE,
283        CAPTURE_IMAGE,
284        CAPTURE_VIDEO,
285        CAPTURE_AUDIO,
286        CAPTURE_PREVIEW,
287        CONFIG
288    }
289
290    [CCode (
291        cname="CameraStorageInfoFields",
292        cheader_filename="gphoto2/gphoto2-filesys.h",
293        cprefix="GP_STORAGEINFO_"
294    )]
295    [Flags]
296    public enum CameraStorageInfoFields {
297        BASE,
298        LABEL,
299        DESCRIPTION,
300        ACCESS,
301        STORAGETYPE,
302        FILESYSTEMTYPE,
303        MAXCAPACITY,
304        FREESPACEKBYTES,
305        FREESPACEIMAGES
306    }
307
308    [SimpleType]
309    [CCode (
310        cname="CameraStorageInformation",
311        cheader_filename="gphoto2/gphoto2-filesys.h"
312    )]
313    public struct CameraStorageInformation {
314        public CameraStorageInfoFields fields;
315        public string basedir;
316        public string label;
317        public string description;
318        public int type;
319        public int fstype;
320        public int access;
321        public ulong capacitykbytes;
322        public ulong freekbytes;
323        public ulong freeimages;
324    }
325
326    [Compact]
327    [CCode (
328        ref_function="GPHOTO_REF_CONTEXT",
329        unref_function="gp_context_unref",
330        cheader_filename="gphoto2/gphoto2-context.h,gphoto.h"
331    )]
332    public class Context {
333        [CCode (cname="gp_context_new")]
334        public Context();
335        public void set_idle_func(ContextIdleFunc func);
336        public void set_progress_funcs(
337            [CCode (delegate_target_pos=3.1)] ContextProgressStartFunc startFunc,
338            [CCode (delegate_target_pos=3.1)] ContextProgressUpdateFunc updateFunc,
339            [CCode (delegate_target_pos=3.1)] ContextProgressStopFunc stopFunc);
340        public void set_error_func([CCode (delegate_target_pos=3.1)] ContextErrorFunc errorFunc);
341        public void set_status_func([CCode (delegate_target_pos=3.1)] ContextStatusFunc statusFunc);
342        public void set_message_func([CCode (delegate_target_pos=3.1)] ContextMessageFunc messageFunc);
343    }
344
345    public delegate void ContextIdleFunc(Context context);
346
347    public delegate void ContextErrorFunc(Context context, string text);
348
349    public delegate void ContextStatusFunc(Context context, string text);
350
351    public delegate void ContextMessageFunc(Context context, string text);
352
353    // TODO: Support for va_args in Vala, esp. for delegates?
354    public delegate uint ContextProgressStartFunc(Context context, float target, string text);
355
356    public delegate void ContextProgressUpdateFunc(Context context, uint id, float current);
357
358    public delegate void ContextProgressStopFunc(Context context, uint id);
359
360    [CCode (
361        cheader_filename="gphoto2/gphoto2-file.h",
362        cprefix="GP_MIME_"
363    )]
364    namespace MIME {
365        public const string WAV;
366        public const string RAW;
367        public const string PNG;
368        public const string PGM;
369        public const string PPM;
370        public const string PNM;
371        public const string JPEG;
372        public const string TIFF;
373        public const string BMP;
374        public const string QUICKTIME;
375        public const string AVI;
376        public const string CRW;
377        public const string UNKNOWN;
378        public const string EXIF;
379        public const string MP3;
380        public const string OGG;
381        public const string WMA;
382        public const string ASF;
383        public const string MPEG;
384    }
385
386    [SimpleType]
387    [CCode (
388        destroy_function="",
389        cheader_filename="gphoto2/gphoto2-port-info-list.h"
390    )]
391    public struct PortInfo {
392        [CCode (cname="gp_port_info_get_path")]
393        public int get_path(out unowned string path);
394        [CCode (cname="gp_port_info_set_path")]
395        public int set_path(string path);
396        [CCode (cname="gp_port_info_get_name")]
397        public int get_name(out unowned string name);
398        [CCode (cname="gp_port_info_set_name")]
399        public int set_name(string path);
400        [CCode (cname="gp_port_info_get_library_filename")]
401        public int get_library_filename(out unowned string lib);
402        [CCode (cname="gp_port_info_set_library_filename")]
403        public int set_library_filename(string lib);
404    }
405
406    [Compact]
407    [CCode (
408        free_function="gp_port_info_list_free",
409        cheader_filename="gphoto2/gphoto2-port-info-list.h"
410    )]
411    public class PortInfoList {
412        [CCode (cname="gp_port_info_list_new")]
413        public static Result create(out PortInfoList list);
414        public Result load();
415        public int count();
416        public int lookup_name(string name);
417        public int lookup_path(string name);
418        public Result get_info(int index, out PortInfo info);
419    }
420
421    [CCode (
422        cheader_filename="gphoto2/gphoto2-port-info-list.h",
423        cprefix="GP_PORT_"
424    )]
425    [Flags]
426    public enum PortType {
427        NONE,
428        SERIAL,
429        USB,
430        DISK,
431        PTPIP
432    }
433
434    [CCode (
435        cname="int",
436        cheader_filename="gphoto2/gphoto2-result.h,gphoto2/gphoto2-port-result.h",
437        cprefix="GP_ERROR_"
438    )]
439    public enum Result {
440        [CCode (cname="GP_OK")]
441        OK,
442        [CCode (cname="GP_ERROR")]
443        ERROR,
444        BAD_PARAMETERS,
445        NO_MEMORY,
446        LIBRARY,
447        UNKNOWN_PORT,
448        NOT_SUPPORTED,
449        IO,
450        FIXED_LIMIT_EXCEEDED,
451        TIMEOUT,
452        IO_SUPPORTED_SERIAL,
453        IO_SUPPORTED_USB,
454        IO_INIT,
455        IO_READ,
456        IO_WRITE,
457        IO_UPDATE,
458        IO_SERIAL_SPEED,
459        IO_USB_CLEAR_HALT,
460        IO_USB_FIND,
461        IO_USB_CLAIM,
462        IO_LOCK,
463        HAL,
464        CORRUPTED_DATA,
465        FILE_EXISTS,
466        MODEL_NOT_FOUND,
467        DIRECTORY_NOT_FOUND,
468        FILE_NOT_FOUND,
469        DIRECTORY_EXISTS,
470        CAMERA_BUSY,
471        PATH_NOT_ABSOLUTE,
472        CANCEL,
473        CAMERA_ERROR,
474        OS_FAILURE;
475
476        [CCode (cname="gp_port_result_as_string")]
477        public unowned string as_string();
478
479        public string to_full_string() {
480            return "%s (%d)".printf(as_string(), this);
481        }
482    }
483
484    [CCode (
485        cheader_filename="gphoto2/gphoto2-version.h",
486        cprefix="GP_VERSION"
487    )]
488    public enum VersionVerbosity {
489        SHORT,
490        VERBOSE
491    }
492
493    public unowned string library_version(VersionVerbosity verbosity);
494}
495
496