1 /*
2  *  Entangle: Tethered Camera Control & Capture
3  *
4  *  Copyright (C) 2009-2017 Daniel P. Berrange
5  *
6  *  This program is free software: you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation, either version 3 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  *
19  */
20 
21 #ifndef __ENTANGLE_CAMERA_H__
22 #define __ENTANGLE_CAMERA_H__
23 
24 #include <glib-object.h>
25 #include <gio/gio.h>
26 
27 #include "entangle-control-group.h"
28 #include "entangle-camera-file.h"
29 #include "entangle-progress.h"
30 
31 G_BEGIN_DECLS
32 
33 #define ENTANGLE_TYPE_CAMERA            (entangle_camera_get_type ())
34 #define ENTANGLE_CAMERA(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), ENTANGLE_TYPE_CAMERA, EntangleCamera))
35 #define ENTANGLE_CAMERA_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), ENTANGLE_TYPE_CAMERA, EntangleCameraClass))
36 #define ENTANGLE_IS_CAMERA(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ENTANGLE_TYPE_CAMERA))
37 #define ENTANGLE_IS_CAMERA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ENTANGLE_TYPE_CAMERA))
38 #define ENTANGLE_CAMERA_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), ENTANGLE_TYPE_CAMERA, EntangleCameraClass))
39 
40 
41 typedef struct _EntangleCamera EntangleCamera;
42 typedef struct _EntangleCameraPrivate EntangleCameraPrivate;
43 typedef struct _EntangleCameraClass EntangleCameraClass;
44 
45 struct _EntangleCamera
46 {
47     GObject parent;
48 
49     EntangleCameraPrivate *priv;
50 };
51 
52 struct _EntangleCameraClass
53 {
54     GObjectClass parent_class;
55 };
56 
57 
58 GType entangle_camera_get_type(void) G_GNUC_CONST;
59 
60 EntangleCamera *entangle_camera_new(const char *model,
61                                     const char *port,
62                                     gboolean hasCapture,
63                                     gboolean hasPreview,
64                                     gboolean hasSettings);
65 
66 const char *entangle_camera_get_model(EntangleCamera *cam);
67 const char *entangle_camera_get_port(EntangleCamera *cam);
68 
69 
70 gboolean entangle_camera_connect(EntangleCamera *cam,
71                                  GError **error);
72 void entangle_camera_connect_async(EntangleCamera *cam,
73                                    GCancellable *cancellable,
74                                    GAsyncReadyCallback callback,
75                                    gpointer user_data);
76 gboolean entangle_camera_connect_finish(EntangleCamera *cam,
77                                         GAsyncResult *result,
78                                         GError **error);
79 
80 gboolean entangle_camera_disconnect(EntangleCamera *cam,
81                                     GError **error);
82 void entangle_camera_disconnect_async(EntangleCamera *cam,
83                                       GCancellable *cancellable,
84                                       GAsyncReadyCallback callback,
85                                       gpointer user_data);
86 gboolean entangle_camera_disconnect_finish(EntangleCamera *cam,
87                                            GAsyncResult *result,
88                                            GError **error);
89 
90 
91 gboolean entangle_camera_get_connected(EntangleCamera *cam);
92 
93 char *entangle_camera_get_summary(EntangleCamera *cam);
94 char *entangle_camera_get_manual(EntangleCamera *cam);
95 char *entangle_camera_get_driver(EntangleCamera *cam);
96 
97 EntangleCameraFile *entangle_camera_capture_image(EntangleCamera *cam,
98                                                   GError **error);
99 void entangle_camera_capture_image_async(EntangleCamera *cam,
100                                          GCancellable *cancellable,
101                                          GAsyncReadyCallback callback,
102                                          gpointer user_data);
103 EntangleCameraFile *entangle_camera_capture_image_finish(EntangleCamera *cam,
104                                                          GAsyncResult *result,
105                                                          GError **error);
106 
107 EntangleCameraFile *entangle_camera_preview_image(EntangleCamera *cam,
108                                                   GError **error);
109 void entangle_camera_preview_image_async(EntangleCamera *cam,
110                                          GCancellable *cancellable,
111                                          GAsyncReadyCallback callback,
112                                          gpointer user_data);
113 EntangleCameraFile *entangle_camera_preview_image_finish(EntangleCamera *cam,
114                                                          GAsyncResult *result,
115                                                          GError **error);
116 
117 gboolean entangle_camera_download_file(EntangleCamera *cam,
118                                        EntangleCameraFile *file,
119                                        GError **error);
120 void entangle_camera_download_file_async(EntangleCamera *cam,
121                                          EntangleCameraFile *file,
122                                          GCancellable *cancellable,
123                                          GAsyncReadyCallback callback,
124                                          gpointer user_data);
125 gboolean entangle_camera_download_file_finish(EntangleCamera *cam,
126                                               GAsyncResult *result,
127                                               GError **err);
128 
129 gboolean entangle_camera_delete_file(EntangleCamera *cam,
130                                      EntangleCameraFile *file,
131                                      GError **error);
132 void entangle_camera_delete_file_async(EntangleCamera *cam,
133                                        EntangleCameraFile *file,
134                                        GCancellable *cancellable,
135                                        GAsyncReadyCallback callback,
136                                        gpointer user_data);
137 gboolean entangle_camera_delete_file_finish(EntangleCamera *cam,
138                                             GAsyncResult *result,
139                                             GError **error);
140 
141 gboolean entangle_camera_process_events(EntangleCamera *cam,
142                                         guint64 waitms,
143                                         GError **error);
144 void entangle_camera_process_events_async(EntangleCamera *cam,
145                                           guint64 waitms,
146                                           GCancellable *cancellable,
147                                           GAsyncReadyCallback callback,
148                                           gpointer user_data);
149 gboolean entangle_camera_process_events_finish(EntangleCamera *cam,
150                                                GAsyncResult *result,
151                                                GError **error);
152 
153 
154 gboolean entangle_camera_set_viewfinder(EntangleCamera *cam,
155                                         gboolean enabled,
156                                         GError **error);
157 void entangle_camera_set_viewfinder_async(EntangleCamera *cam,
158                                           gboolean enabled,
159                                           GCancellable *cancellable,
160                                           GAsyncReadyCallback callback,
161                                           gpointer user_data);
162 gboolean entangle_camera_set_viewfinder_finish(EntangleCamera *cam,
163                                                GAsyncResult *result,
164                                                GError **error);
165 
166 gboolean entangle_camera_autofocus(EntangleCamera *cam,
167                                    GError **error);
168 void entangle_camera_autofocus_async(EntangleCamera *cam,
169                                      GCancellable *cancellable,
170                                      GAsyncReadyCallback callback,
171                                      gpointer user_data);
172 gboolean entangle_camera_autofocus_finish(EntangleCamera *cam,
173                                           GAsyncResult *result,
174                                           GError **error);
175 
176 typedef enum {
177     ENTANGLE_CAMERA_MANUAL_FOCUS_STEP_IN_COARSE,
178     ENTANGLE_CAMERA_MANUAL_FOCUS_STEP_IN_MEDIUM,
179     ENTANGLE_CAMERA_MANUAL_FOCUS_STEP_IN_FINE,
180     ENTANGLE_CAMERA_MANUAL_FOCUS_STEP_OUT_COARSE,
181     ENTANGLE_CAMERA_MANUAL_FOCUS_STEP_OUT_MEDIUM,
182     ENTANGLE_CAMERA_MANUAL_FOCUS_STEP_OUT_FINE,
183 } EntangleCameraManualFocusStep;
184 
185 gboolean entangle_camera_manualfocus(EntangleCamera *cam,
186                                      EntangleCameraManualFocusStep step,
187                                      GError **error);
188 void entangle_camera_manualfocus_async(EntangleCamera *cam,
189                                        EntangleCameraManualFocusStep step,
190                                        GCancellable *cancellable,
191                                        GAsyncReadyCallback callback,
192                                        gpointer user_data);
193 gboolean entangle_camera_manualfocus_finish(EntangleCamera *cam,
194                                             GAsyncResult *result,
195                                             GError **error);
196 
197 gboolean entangle_camera_set_clock(EntangleCamera *cam,
198                                    gint64 epochsecs,
199                                    GError **error);
200 void entangle_camera_set_clock_async(EntangleCamera *cam,
201                                      gint64 epochsecs,
202                                      GCancellable *cancellable,
203                                      GAsyncReadyCallback callback,
204                                      gpointer user_data);
205 gboolean entangle_camera_set_clock_finish(EntangleCamera *cam,
206                                           GAsyncResult *result,
207                                           GError **error);
208 
209 
210 typedef enum {
211     ENTANGLE_CAMERA_CAPTURE_TARGET_RAM,
212     ENTANGLE_CAMERA_CAPTURE_TARGET_CARD,
213 } EntangleCameraCaptureTarget;
214 
215 gboolean entangle_camera_set_capture_target(EntangleCamera *cam,
216                                             EntangleCameraCaptureTarget target,
217                                             GError **error);
218 void entangle_camera_set_capture_target_async(EntangleCamera *cam,
219                                               EntangleCameraCaptureTarget target,
220                                               GCancellable *cancellable,
221                                               GAsyncReadyCallback callback,
222                                               gpointer user_data);
223 gboolean entangle_camera_set_capture_target_finish(EntangleCamera *cam,
224                                                    GAsyncResult *result,
225                                                    GError **error);
226 
227 
228 gboolean entangle_camera_get_has_capture(EntangleCamera *cam);
229 gboolean entangle_camera_get_has_preview(EntangleCamera *cam);
230 gboolean entangle_camera_get_has_settings(EntangleCamera *cam);
231 gboolean entangle_camera_get_has_viewfinder(EntangleCamera *cam);
232 
233 gboolean entangle_camera_load_controls(EntangleCamera *cam,
234                                        GError **error);
235 void entangle_camera_load_controls_async(EntangleCamera *cam,
236                                          GCancellable *cancellable,
237                                          GAsyncReadyCallback callback,
238                                          gpointer user_data);
239 gboolean entangle_camera_load_controls_finish(EntangleCamera *cam,
240                                               GAsyncResult *result,
241                                               GError **error);
242 
243 gboolean entangle_camera_save_controls(EntangleCamera *cam,
244                                        GError **error);
245 void entangle_camera_save_controls_async(EntangleCamera *cam,
246                                          GCancellable *cancellable,
247                                          GAsyncReadyCallback callback,
248                                          gpointer user_data);
249 gboolean entangle_camera_save_controls_finish(EntangleCamera *cam,
250                                               GAsyncResult *result,
251                                                GError **error);
252 
253 
254 EntangleControlGroup *entangle_camera_get_controls(EntangleCamera *cam,
255                                                    GError **error);
256 
257 void entangle_camera_set_progress(EntangleCamera *cam, EntangleProgress *prog);
258 EntangleProgress *entangle_camera_get_progress(EntangleCamera *cam);
259 
260 gboolean entangle_camera_is_mounted(EntangleCamera *cam);
261 
262 void entangle_camera_mount_async(EntangleCamera *cam,
263                                  GCancellable *cancellable,
264                                  GAsyncReadyCallback callback,
265                                  gpointer user_data);
266 gboolean entangle_camera_mount_finish(EntangleCamera *cam,
267                                       GAsyncResult *result,
268                                       GError **err);
269 
270 void entangle_camera_unmount_async(EntangleCamera *cam,
271                                    GCancellable *cancellable,
272                                    GAsyncReadyCallback callback,
273                                    gpointer user_data);
274 gboolean entangle_camera_unmount_finish(EntangleCamera *cam,
275                                         GAsyncResult *result,
276                                         GError **err);
277 
278 G_END_DECLS
279 
280 #endif /* __ENTANGLE_CAMERA_H__ */
281 
282 /*
283  * Local variables:
284  *  c-indent-level: 4
285  *  c-basic-offset: 4
286  *  indent-tabs-mode: nil
287  *  tab-width: 8
288  * End:
289  */
290