00001
00028 #ifndef LIBMTP_H_INCLUSION_GUARD
00029 #define LIBMTP_H_INCLUSION_GUARD
00030
00031 #define LIBMTP_VERSION 0.2.2
00032 #define LIBMTP_VERSION_STRING "0.2.2"
00033
00034
00035 #ifdef _MSC_VER
00036 #include <windows.h>
00037 #define __WIN32__
00038 #define snprintf _snprintf
00039 #define ssize_t SSIZE_T
00040 #endif
00041
00042 #include <stdio.h>
00043 #include <usb.h>
00044 #include <stdint.h>
00045
00046 #ifdef __WIN32__
00047
00048
00049
00050
00051 typedef char int8_t;
00052 typedef unsigned char uint8_t;
00053 typedef __int16 int16_t;
00054 typedef unsigned __int16 uint16_t;
00055 typedef __int32 int32_t;
00056 typedef unsigned __int32 uint32_t;
00057 typedef unsigned __int64 uint64_t;
00058 #endif
00059
00067 typedef enum {
00068 LIBMTP_FILETYPE_WAV,
00069 LIBMTP_FILETYPE_MP3,
00070 LIBMTP_FILETYPE_WMA,
00071 LIBMTP_FILETYPE_OGG,
00072 LIBMTP_FILETYPE_AUDIBLE,
00073 LIBMTP_FILETYPE_MP4,
00074 LIBMTP_FILETYPE_UNDEF_AUDIO,
00075 LIBMTP_FILETYPE_WMV,
00076 LIBMTP_FILETYPE_AVI,
00077 LIBMTP_FILETYPE_MPEG,
00078 LIBMTP_FILETYPE_ASF,
00079 LIBMTP_FILETYPE_QT,
00080 LIBMTP_FILETYPE_UNDEF_VIDEO,
00081 LIBMTP_FILETYPE_JPEG,
00082 LIBMTP_FILETYPE_JFIF,
00083 LIBMTP_FILETYPE_TIFF,
00084 LIBMTP_FILETYPE_BMP,
00085 LIBMTP_FILETYPE_GIF,
00086 LIBMTP_FILETYPE_PICT,
00087 LIBMTP_FILETYPE_PNG,
00088 LIBMTP_FILETYPE_VCALENDAR1,
00089 LIBMTP_FILETYPE_VCALENDAR2,
00090 LIBMTP_FILETYPE_VCARD2,
00091 LIBMTP_FILETYPE_VCARD3,
00092 LIBMTP_FILETYPE_WINDOWSIMAGEFORMAT,
00093 LIBMTP_FILETYPE_WINEXEC,
00094 LIBMTP_FILETYPE_TEXT,
00095 LIBMTP_FILETYPE_HTML,
00096 LIBMTP_FILETYPE_FIRMWARE,
00097 LIBMTP_FILETYPE_AAC,
00098 LIBMTP_FILETYPE_MEDIACARD,
00099 LIBMTP_FILETYPE_FLAC,
00100 LIBMTP_FILETYPE_MP2,
00101 LIBMTP_FILETYPE_M4A,
00102 LIBMTP_FILETYPE_DOC,
00103 LIBMTP_FILETYPE_XML,
00104 LIBMTP_FILETYPE_XLS,
00105 LIBMTP_FILETYPE_PPT,
00106 LIBMTP_FILETYPE_MHT,
00107 LIBMTP_FILETYPE_JP2,
00108 LIBMTP_FILETYPE_JPX,
00109 LIBMTP_FILETYPE_UNKNOWN
00110 } LIBMTP_filetype_t;
00115 typedef enum {
00116 LIBMTP_ERROR_NONE,
00117 LIBMTP_ERROR_GENERAL,
00118 LIBMTP_ERROR_PTP_LAYER,
00119 LIBMTP_ERROR_USB_LAYER,
00120 LIBMTP_ERROR_MEMORY_ALLOCATION,
00121 LIBMTP_ERROR_NO_DEVICE_ATTACHED,
00122 LIBMTP_ERROR_STORAGE_FULL,
00123 LIBMTP_ERROR_CONNECTING,
00124 LIBMTP_ERROR_CANCELLED
00125 } LIBMTP_error_number_t;
00126 typedef struct LIBMTP_device_entry_struct LIBMTP_device_entry_t;
00127 typedef struct LIBMTP_error_struct LIBMTP_error_t;
00128 typedef struct LIBMTP_mtpdevice_struct LIBMTP_mtpdevice_t;
00129 typedef struct LIBMTP_file_struct LIBMTP_file_t;
00130 typedef struct LIBMTP_track_struct LIBMTP_track_t;
00131 typedef struct LIBMTP_playlist_struct LIBMTP_playlist_t;
00132 typedef struct LIBMTP_album_struct LIBMTP_album_t;
00133 typedef struct LIBMTP_folder_struct LIBMTP_folder_t;
00134 typedef struct LIBMTP_object_struct LIBMTP_object_t;
00135 typedef struct LIBMTP_filesampledata_struct LIBMTP_filesampledata_t;
00136 typedef struct LIBMTP_devicestorage_struct LIBMTP_devicestorage_t;
00148 typedef int (* LIBMTP_progressfunc_t) (uint64_t const sent, uint64_t const total,
00149 void const * const data);
00150
00160 struct LIBMTP_device_entry_struct {
00161 char *name;
00162 uint16_t vendor_id;
00163 uint16_t product_id;
00164 uint32_t device_flags;
00165 };
00166
00170 struct LIBMTP_error_struct {
00171 LIBMTP_error_number_t errornumber;
00172 char *error_text;
00173 LIBMTP_error_t *next;
00174 };
00175
00179 struct LIBMTP_mtpdevice_struct {
00183 uint8_t object_bitsize;
00188 void *params;
00193 void *usbinfo;
00199 LIBMTP_devicestorage_t *storage;
00204 LIBMTP_error_t *errorstack;
00206 uint8_t maximum_battery_level;
00208 uint32_t default_music_folder;
00210 uint32_t default_playlist_folder;
00212 uint32_t default_picture_folder;
00214 uint32_t default_video_folder;
00216 uint32_t default_organizer_folder;
00218 uint32_t default_zencast_folder;
00220 uint32_t default_album_folder;
00222 uint32_t default_text_folder;
00224 void *cd;
00225
00227 LIBMTP_mtpdevice_t *next;
00228 };
00229
00233 struct LIBMTP_file_struct {
00234 uint32_t item_id;
00235 uint32_t parent_id;
00236 char *filename;
00237 uint64_t filesize;
00238 LIBMTP_filetype_t filetype;
00239 LIBMTP_file_t *next;
00240 };
00241
00245 struct LIBMTP_track_struct {
00246 uint32_t item_id;
00247 uint32_t parent_id;
00248 char *title;
00249 char *artist;
00250 char *genre;
00251 char *album;
00252 char *date;
00253 char *filename;
00254 uint16_t tracknumber;
00255 uint32_t duration;
00256 uint32_t samplerate;
00257 uint16_t nochannels;
00258 uint32_t wavecodec;
00259 uint32_t bitrate;
00260 uint16_t bitratetype;
00261 uint16_t rating;
00262 uint32_t usecount;
00263 uint64_t filesize;
00264 LIBMTP_filetype_t filetype;
00265 LIBMTP_track_t *next;
00266 };
00267
00271 struct LIBMTP_playlist_struct {
00272 uint32_t playlist_id;
00273 char *name;
00274 uint32_t *tracks;
00275 uint32_t no_tracks;
00276 LIBMTP_playlist_t *next;
00277 };
00278
00282 struct LIBMTP_album_struct {
00283 uint32_t album_id;
00284 char *name;
00285 char *artist;
00286 char *genre;
00287 uint32_t *tracks;
00288 uint32_t no_tracks;
00289 LIBMTP_album_t *next;
00290 };
00291
00295 struct LIBMTP_folder_struct {
00296 uint32_t folder_id;
00297 uint32_t parent_id;
00298 char *name;
00299 LIBMTP_folder_t *sibling;
00300 LIBMTP_folder_t *child;
00301 };
00302
00306 struct LIBMTP_filesampledata_struct {
00307 uint32_t width;
00308 uint32_t height;
00309 uint32_t duration;
00310 LIBMTP_filetype_t filetype;
00311 uint64_t size;
00312 char *data;
00313 };
00314
00318 struct LIBMTP_devicestorage_struct {
00319 uint32_t id;
00320 uint16_t StorageType;
00321 uint16_t FilesystemType;
00322 uint16_t AccessCapability;
00323 uint64_t MaxCapacity;
00324 uint64_t FreeSpaceInBytes;
00325 uint64_t FreeSpaceInObjects;
00326 char *StorageDescription;
00327 char *VolumeIdentifier;
00328 LIBMTP_devicestorage_t *next;
00329 LIBMTP_devicestorage_t *prev;
00330 };
00331
00332
00335
00336 #ifdef __cplusplus
00337 extern "C" {
00338 #endif
00339
00344 void LIBMTP_Init(void);
00345 int LIBMTP_Get_Supported_Devices_List(LIBMTP_device_entry_t ** const, int * const);
00351 int LIBMTP_Detect_Descriptor(uint16_t*,uint16_t*);
00352 LIBMTP_mtpdevice_t *LIBMTP_Get_First_Device(void);
00353 LIBMTP_error_number_t LIBMTP_Get_Connected_Devices(LIBMTP_mtpdevice_t **);
00354 uint32_t LIBMTP_Number_Devices_In_List(LIBMTP_mtpdevice_t *);
00355 void LIBMTP_Release_Device_List(LIBMTP_mtpdevice_t*);
00356 void LIBMTP_Release_Device(LIBMTP_mtpdevice_t*);
00357 void LIBMTP_Dump_Device_Info(LIBMTP_mtpdevice_t*);
00358 int LIBMTP_Reset_Device(LIBMTP_mtpdevice_t*);
00359 char *LIBMTP_Get_Modelname(LIBMTP_mtpdevice_t*);
00360 char *LIBMTP_Get_Serialnumber(LIBMTP_mtpdevice_t*);
00361 char *LIBMTP_Get_Deviceversion(LIBMTP_mtpdevice_t*);
00362 char *LIBMTP_Get_Friendlyname(LIBMTP_mtpdevice_t*);
00363 int LIBMTP_Set_Friendlyname(LIBMTP_mtpdevice_t*, char const * const);
00364 char *LIBMTP_Get_Syncpartner(LIBMTP_mtpdevice_t*);
00365 int LIBMTP_Set_Syncpartner(LIBMTP_mtpdevice_t*, char const * const);
00366 int LIBMTP_Get_Batterylevel(LIBMTP_mtpdevice_t *,
00367 uint8_t * const,
00368 uint8_t * const);
00369 int LIBMTP_Get_Secure_Time(LIBMTP_mtpdevice_t *, char ** const);
00370 int LIBMTP_Get_Device_Certificate(LIBMTP_mtpdevice_t *, char ** const);
00371 int LIBMTP_Get_Supported_Filetypes(LIBMTP_mtpdevice_t *, uint16_t ** const, uint16_t * const);
00372 LIBMTP_error_t *LIBMTP_Get_Errorstack(LIBMTP_mtpdevice_t*);
00373 void LIBMTP_Clear_Errorstack(LIBMTP_mtpdevice_t*);
00374 void LIBMTP_Dump_Errorstack(LIBMTP_mtpdevice_t*);
00375
00376 #define LIBMTP_STORAGE_SORTBY_NOTSORTED 0
00377 #define LIBMTP_STORAGE_SORTBY_FREESPACE 1
00378 #define LIBMTP_STORAGE_SORTBY_MAXSPACE 2
00379
00380 int LIBMTP_Get_Storage(LIBMTP_mtpdevice_t *, int const);
00381 int LIBMTP_Format_Storage(LIBMTP_mtpdevice_t *, LIBMTP_devicestorage_t *);
00382
00383
00389 LIBMTP_file_t *LIBMTP_new_file_t(void);
00390 void LIBMTP_destroy_file_t(LIBMTP_file_t*);
00391 char const * LIBMTP_Get_Filetype_Description(LIBMTP_filetype_t);
00392 LIBMTP_file_t *LIBMTP_Get_Filelisting(LIBMTP_mtpdevice_t *);
00393 LIBMTP_file_t *LIBMTP_Get_Filelisting_With_Callback(LIBMTP_mtpdevice_t *,
00394 LIBMTP_progressfunc_t const, void const * const);
00395 LIBMTP_file_t *LIBMTP_Get_Filemetadata(LIBMTP_mtpdevice_t *, uint32_t const);
00396 int LIBMTP_Get_File_To_File(LIBMTP_mtpdevice_t*, uint32_t, char const * const,
00397 LIBMTP_progressfunc_t const, void const * const);
00398 int LIBMTP_Get_File_To_File_Descriptor(LIBMTP_mtpdevice_t*, uint32_t const, int const,
00399 LIBMTP_progressfunc_t const, void const * const);
00400 int LIBMTP_Send_File_From_File(LIBMTP_mtpdevice_t *, char const * const,
00401 LIBMTP_file_t * const, LIBMTP_progressfunc_t const,
00402 void const * const, uint32_t const);
00403 int LIBMTP_Send_File_From_File_Descriptor(LIBMTP_mtpdevice_t *, int const,
00404 LIBMTP_file_t * const, LIBMTP_progressfunc_t const,
00405 void const * const, uint32_t const);
00406 LIBMTP_filesampledata_t *LIBMTP_new_filesampledata_t(void);
00407 void LIBMTP_destroy_filesampledata_t(LIBMTP_filesampledata_t *);
00408 int LIBMTP_Get_Representative_Sample_Format(LIBMTP_mtpdevice_t *,
00409 LIBMTP_filetype_t const,
00410 LIBMTP_filesampledata_t **);
00411 int LIBMTP_Send_Representative_Sample(LIBMTP_mtpdevice_t *, uint32_t const,
00412 LIBMTP_filesampledata_t *);
00413
00419 LIBMTP_track_t *LIBMTP_new_track_t(void);
00420 void LIBMTP_destroy_track_t(LIBMTP_track_t*);
00421 LIBMTP_track_t *LIBMTP_Get_Tracklisting(LIBMTP_mtpdevice_t*);
00422 LIBMTP_track_t *LIBMTP_Get_Tracklisting_With_Callback(LIBMTP_mtpdevice_t*,
00423 LIBMTP_progressfunc_t const, void const * const);
00424 LIBMTP_track_t *LIBMTP_Get_Trackmetadata(LIBMTP_mtpdevice_t*, uint32_t const);
00425 int LIBMTP_Get_Track_To_File(LIBMTP_mtpdevice_t*, uint32_t, char const * const,
00426 LIBMTP_progressfunc_t const, void const * const);
00427 int LIBMTP_Get_Track_To_File_Descriptor(LIBMTP_mtpdevice_t*, uint32_t const, int const,
00428 LIBMTP_progressfunc_t const, void const * const);
00429 int LIBMTP_Send_Track_From_File(LIBMTP_mtpdevice_t *,
00430 char const * const, LIBMTP_track_t * const,
00431 LIBMTP_progressfunc_t const,
00432 void const * const, uint32_t const);
00433 int LIBMTP_Send_Track_From_File_Descriptor(LIBMTP_mtpdevice_t *,
00434 int const, LIBMTP_track_t * const,
00435 LIBMTP_progressfunc_t const,
00436 void const * const, uint32_t const);
00437 int LIBMTP_Update_Track_Metadata(LIBMTP_mtpdevice_t *,
00438 LIBMTP_track_t const * const);
00439 int LIBMTP_Track_Exists(LIBMTP_mtpdevice_t *, uint32_t);
00447 LIBMTP_folder_t *LIBMTP_new_folder_t(void);
00448 void LIBMTP_destroy_folder_t(LIBMTP_folder_t*);
00449 LIBMTP_folder_t *LIBMTP_Get_Folder_List(LIBMTP_mtpdevice_t*);
00450 LIBMTP_folder_t *LIBMTP_Find_Folder(LIBMTP_folder_t*, uint32_t const);
00451 uint32_t LIBMTP_Create_Folder(LIBMTP_mtpdevice_t*, char *, uint32_t);
00460 LIBMTP_playlist_t *LIBMTP_new_playlist_t(void);
00461 void LIBMTP_destroy_playlist_t(LIBMTP_playlist_t *);
00462 LIBMTP_playlist_t *LIBMTP_Get_Playlist_List(LIBMTP_mtpdevice_t *);
00463 LIBMTP_playlist_t *LIBMTP_Get_Playlist(LIBMTP_mtpdevice_t *, uint32_t const);
00464 int LIBMTP_Create_New_Playlist(LIBMTP_mtpdevice_t *, LIBMTP_playlist_t * const, uint32_t const);
00465 int LIBMTP_Update_Playlist(LIBMTP_mtpdevice_t *, LIBMTP_playlist_t const * const);
00466
00472 LIBMTP_album_t *LIBMTP_new_album_t(void);
00473 void LIBMTP_destroy_album_t(LIBMTP_album_t *);
00474 LIBMTP_album_t *LIBMTP_Get_Album_List(LIBMTP_mtpdevice_t *);
00475 LIBMTP_album_t *LIBMTP_Get_Album(LIBMTP_mtpdevice_t *, uint32_t const);
00476 int LIBMTP_Create_New_Album(LIBMTP_mtpdevice_t *, LIBMTP_album_t * const, uint32_t const);
00477 int LIBMTP_Update_Album(LIBMTP_mtpdevice_t *, LIBMTP_album_t const * const);
00478
00484 int LIBMTP_Delete_Object(LIBMTP_mtpdevice_t *, uint32_t);
00485
00488
00489 #ifdef __cplusplus
00490 }
00491 #endif
00492
00493 #endif
00494