00001
00029 #ifndef __GPHOTO2_FILESYS_H__
00030 #define __GPHOTO2_FILESYS_H__
00031
00032 #include <time.h>
00033
00034 #include <gphoto2/gphoto2-context.h>
00035 #include <gphoto2/gphoto2-list.h>
00036 #include <gphoto2/gphoto2-file.h>
00037
00038 #ifdef __cplusplus
00039 extern "C" {
00040 #endif
00041
00053 typedef enum {
00054 GP_FILE_INFO_NONE = 0,
00055 GP_FILE_INFO_TYPE = 1 << 0,
00056 GP_FILE_INFO_NAME = 1 << 1,
00057 GP_FILE_INFO_SIZE = 1 << 2,
00058 GP_FILE_INFO_WIDTH = 1 << 3,
00059 GP_FILE_INFO_HEIGHT = 1 << 4,
00060 GP_FILE_INFO_PERMISSIONS = 1 << 5,
00061 GP_FILE_INFO_STATUS = 1 << 6,
00062 GP_FILE_INFO_MTIME = 1 << 7,
00063 GP_FILE_INFO_ALL = 0xFF
00064 } CameraFileInfoFields;
00065
00071 typedef enum {
00072 GP_FILE_PERM_NONE = 0,
00073 GP_FILE_PERM_READ = 1 << 0,
00074 GP_FILE_PERM_DELETE = 1 << 1,
00075 GP_FILE_PERM_ALL = 0xFF
00076 } CameraFilePermissions;
00077
00083 typedef enum {
00084 GP_FILE_STATUS_NOT_DOWNLOADED,
00085 GP_FILE_STATUS_DOWNLOADED
00086 } CameraFileStatus;
00087
00094 typedef struct _CameraFileInfoFile {
00095 CameraFileInfoFields fields;
00096 CameraFileStatus status;
00097 unsigned long size;
00098 char type[64];
00100 unsigned int width;
00101 unsigned int height;
00102 char name[64];
00103 CameraFilePermissions permissions;
00104 time_t mtime;
00105 } CameraFileInfoFile;
00106
00113 typedef struct _CameraFileInfoPreview {
00114 CameraFileInfoFields fields;
00115 CameraFileStatus status;
00116 unsigned long size;
00117 char type[64];
00119 unsigned int width;
00120 unsigned int height;
00121 } CameraFileInfoPreview;
00122
00129 typedef struct _CameraFileInfoAudio {
00130 CameraFileInfoFields fields;
00131 CameraFileStatus status;
00132 unsigned long size;
00133 char type[64];
00134 } CameraFileInfoAudio;
00135
00142 typedef struct _CameraFileInfo {
00143 CameraFileInfoPreview preview;
00144 CameraFileInfoFile file;
00145 CameraFileInfoAudio audio;
00146 } CameraFileInfo;
00147
00154 typedef enum {
00155 GP_STORAGEINFO_BASE = (1<<0),
00158 GP_STORAGEINFO_LABEL = (1<<1),
00161 GP_STORAGEINFO_DESCRIPTION = (1<<2),
00162 GP_STORAGEINFO_ACCESS = (1<<3),
00163 GP_STORAGEINFO_STORAGETYPE = (1<<4),
00164 GP_STORAGEINFO_FILESYSTEMTYPE = (1<<5),
00165 GP_STORAGEINFO_MAXCAPACITY = (1<<6),
00166 GP_STORAGEINFO_FREESPACEKBYTES = (1<<7),
00167 GP_STORAGEINFO_FREESPACEIMAGES = (1<<8)
00168 } CameraStorageInfoFields;
00169
00176 typedef enum {
00177 GP_STORAGEINFO_ST_UNKNOWN = 0,
00178 GP_STORAGEINFO_ST_FIXED_ROM = 1,
00179 GP_STORAGEINFO_ST_REMOVABLE_ROM = 2,
00180 GP_STORAGEINFO_ST_FIXED_RAM = 3,
00181 GP_STORAGEINFO_ST_REMOVABLE_RAM = 4
00182 } CameraStorageType;
00183
00190 typedef enum {
00191 GP_STORAGEINFO_AC_READWRITE = 0,
00192 GP_STORAGEINFO_AC_READONLY = 1,
00193 GP_STORAGEINFO_AC_READONLY_WITH_DELETE = 2
00194 } CameraStorageAccessType;
00195
00202 typedef enum {
00203 GP_STORAGEINFO_FST_UNDEFINED = 0,
00204 GP_STORAGEINFO_FST_GENERICFLAT = 1,
00205 GP_STORAGEINFO_FST_GENERICHIERARCHICAL = 2,
00206 GP_STORAGEINFO_FST_DCF = 3
00207 } CameraStorageFilesystemType;
00208
00215 typedef struct _CameraStorageInformation {
00216 CameraStorageInfoFields fields;
00217 char basedir[256];
00218 char label[256];
00219 char description[256];
00220 CameraStorageType type;
00221 CameraStorageFilesystemType fstype;
00222 CameraStorageAccessType access;
00223 unsigned long capacitykbytes;
00224 unsigned long freekbytes;
00225 unsigned long freeimages;
00226 } CameraStorageInformation;
00227
00235 typedef struct _CameraFilesystem CameraFilesystem;
00236
00237 int gp_filesystem_new (CameraFilesystem **fs);
00238 int gp_filesystem_free (CameraFilesystem *fs);
00239
00240
00241 int gp_filesystem_append (CameraFilesystem *fs, const char *folder,
00242 const char *filename, GPContext *context);
00243 int gp_filesystem_set_info_noop (CameraFilesystem *fs, const char *folder,
00244 CameraFileInfo info, GPContext *context);
00245 int gp_filesystem_set_file_noop (CameraFilesystem *fs, const char *folder,
00246 CameraFile *file, GPContext *context);
00247 int gp_filesystem_delete_file_noop (CameraFilesystem *fs, const char *folder,
00248 const char *filename, GPContext *context);
00249 int gp_filesystem_reset (CameraFilesystem *fs);
00250
00251
00252 int gp_filesystem_count (CameraFilesystem *fs, const char *folder,
00253 GPContext *context);
00254 int gp_filesystem_name (CameraFilesystem *fs, const char *folder,
00255 int filenumber, const char **filename,
00256 GPContext *context);
00257 int gp_filesystem_get_folder (CameraFilesystem *fs, const char *filename,
00258 const char **folder, GPContext *context);
00259 int gp_filesystem_number (CameraFilesystem *fs, const char *folder,
00260 const char *filename, GPContext *context);
00261
00262
00263 typedef int (*CameraFilesystemListFunc) (CameraFilesystem *fs,
00264 const char *folder, CameraList *list,
00265 void *data, GPContext *context);
00266 int gp_filesystem_set_list_funcs (CameraFilesystem *fs,
00267 CameraFilesystemListFunc file_list_func,
00268 CameraFilesystemListFunc folder_list_func,
00269 void *data);
00270 int gp_filesystem_list_files (CameraFilesystem *fs, const char *folder,
00271 CameraList *list, GPContext *context);
00272 int gp_filesystem_list_folders (CameraFilesystem *fs, const char *folder,
00273 CameraList *list, GPContext *context);
00274
00275
00276 typedef int (*CameraFilesystemSetInfoFunc) (CameraFilesystem *fs,
00277 const char *folder,
00278 const char *filename,
00279 CameraFileInfo info, void *data,
00280 GPContext *context);
00281 typedef int (*CameraFilesystemGetInfoFunc) (CameraFilesystem *fs,
00282 const char *folder,
00283 const char *filename,
00284 CameraFileInfo *info, void *data,
00285 GPContext *context);
00286 int gp_filesystem_set_info_funcs (CameraFilesystem *fs,
00287 CameraFilesystemGetInfoFunc get_info_func,
00288 CameraFilesystemSetInfoFunc set_info_func,
00289 void *data);
00290 int gp_filesystem_get_info (CameraFilesystem *fs, const char *folder,
00291 const char *filename, CameraFileInfo *info,
00292 GPContext *context);
00293 int gp_filesystem_set_info (CameraFilesystem *fs, const char *folder,
00294 const char *filename, CameraFileInfo info,
00295 GPContext *context);
00296
00297
00298 typedef int (*CameraFilesystemGetFileFunc) (CameraFilesystem *fs,
00299 const char *folder,
00300 const char *filename,
00301 CameraFileType type,
00302 CameraFile *file, void *data,
00303 GPContext *context);
00304 typedef int (*CameraFilesystemDeleteFileFunc) (CameraFilesystem *fs,
00305 const char *folder,
00306 const char *filename,
00307 void *data, GPContext *context);
00308 int gp_filesystem_set_file_funcs (CameraFilesystem *fs,
00309 CameraFilesystemGetFileFunc get_file_func,
00310 CameraFilesystemDeleteFileFunc del_file_func,
00311 void *data);
00312 int gp_filesystem_get_file (CameraFilesystem *fs, const char *folder,
00313 const char *filename, CameraFileType type,
00314 CameraFile *file, GPContext *context);
00315 int gp_filesystem_delete_file (CameraFilesystem *fs, const char *folder,
00316 const char *filename, GPContext *context);
00317
00318
00319 typedef int (*CameraFilesystemPutFileFunc) (CameraFilesystem *fs,
00320 const char *folder,
00321 CameraFile *file, void *data,
00322 GPContext *context);
00323 typedef int (*CameraFilesystemDeleteAllFunc) (CameraFilesystem *fs,
00324 const char *folder, void *data,
00325 GPContext *context);
00326 typedef int (*CameraFilesystemDirFunc) (CameraFilesystem *fs,
00327 const char *folder,
00328 const char *name, void *data,
00329 GPContext *context);
00330 int gp_filesystem_set_folder_funcs (CameraFilesystem *fs,
00331 CameraFilesystemPutFileFunc put_file_func,
00332 CameraFilesystemDeleteAllFunc delete_all_func,
00333 CameraFilesystemDirFunc make_dir_func,
00334 CameraFilesystemDirFunc remove_dir_func,
00335 void *data);
00336
00337 typedef int (*CameraFilesystemStorageInfoFunc) (CameraFilesystem *fs,
00338 CameraStorageInformation **,
00339 int *nrofstorageinformations,
00340 void *data, GPContext *context);
00341
00342 int gp_filesystem_get_storageinfo (CameraFilesystem *fs,
00343 CameraStorageInformation **,
00344 int *nrofstorageinformations,
00345 GPContext *context);
00346
00347 typedef struct _CameraFilesystemFuncs CameraFilesystemFuncs;
00348 struct _CameraFilesystemFuncs {
00349 CameraFilesystemListFunc file_list_func;
00350 CameraFilesystemListFunc folder_list_func;
00351 CameraFilesystemPutFileFunc put_file_func;
00352 CameraFilesystemDeleteAllFunc delete_all_func;
00353 CameraFilesystemGetInfoFunc get_info_func;
00354 CameraFilesystemSetInfoFunc set_info_func;
00355 CameraFilesystemDirFunc make_dir_func;
00356 CameraFilesystemDirFunc remove_dir_func;
00357 CameraFilesystemGetFileFunc get_file_func;
00358 CameraFilesystemDeleteFileFunc del_file_func;
00359
00360 CameraFilesystemStorageInfoFunc storage_info_func;
00361
00362
00363 void *unused[31];
00364 };
00365 int gp_filesystem_set_funcs (CameraFilesystem *fs,
00366 CameraFilesystemFuncs *funcs,
00367 void *data);
00368 int gp_filesystem_put_file (CameraFilesystem *fs, const char *folder,
00369 CameraFile *file, GPContext *context);
00370 int gp_filesystem_delete_all (CameraFilesystem *fs, const char *folder,
00371 GPContext *context);
00372 int gp_filesystem_make_dir (CameraFilesystem *fs, const char *folder,
00373 const char *name, GPContext *context);
00374 int gp_filesystem_remove_dir (CameraFilesystem *fs, const char *folder,
00375 const char *name, GPContext *context);
00376
00377
00378 int gp_filesystem_dump (CameraFilesystem *fs);
00379
00380 #ifdef __cplusplus
00381 }
00382 #endif
00383
00384 #endif