libmtp.h

Go to the documentation of this file.
00001 
00029 #ifndef LIBMTP_H_INCLUSION_GUARD
00030 #define LIBMTP_H_INCLUSION_GUARD
00031 
00032 #define LIBMTP_VERSION 0.3.7
00033 #define LIBMTP_VERSION_STRING "0.3.7"
00034 
00035 /* This handles MSVC pecularities */
00036 #ifdef _MSC_VER
00037 #include <windows.h>
00038 #define __WIN32__
00039 #define snprintf _snprintf
00040 #define ssize_t SSIZE_T
00041 /*
00042  * Types that do not exist in Windows
00043  * sys/types.h, but they exist in mingw32
00044  * sys/types.h.
00045  */
00046 typedef char int8_t;
00047 typedef unsigned char uint8_t;
00048 typedef __int16 int16_t;
00049 typedef unsigned __int16 uint16_t;
00050 typedef __int32 int32_t;
00051 typedef unsigned __int32 uint32_t;
00052 typedef unsigned __int64 uint64_t;
00053 #endif
00054 
00055 #include <stdio.h>
00056 #include <usb.h>
00057 #include <stdint.h>
00058 
00066 typedef enum {
00067   LIBMTP_FILETYPE_WAV,
00068   LIBMTP_FILETYPE_MP3,
00069   LIBMTP_FILETYPE_WMA,
00070   LIBMTP_FILETYPE_OGG,
00071   LIBMTP_FILETYPE_AUDIBLE,
00072   LIBMTP_FILETYPE_MP4,
00073   LIBMTP_FILETYPE_UNDEF_AUDIO,
00074   LIBMTP_FILETYPE_WMV,
00075   LIBMTP_FILETYPE_AVI,
00076   LIBMTP_FILETYPE_MPEG,
00077   LIBMTP_FILETYPE_ASF,
00078   LIBMTP_FILETYPE_QT,
00079   LIBMTP_FILETYPE_UNDEF_VIDEO,
00080   LIBMTP_FILETYPE_JPEG,
00081   LIBMTP_FILETYPE_JFIF,
00082   LIBMTP_FILETYPE_TIFF,
00083   LIBMTP_FILETYPE_BMP,
00084   LIBMTP_FILETYPE_GIF,
00085   LIBMTP_FILETYPE_PICT,
00086   LIBMTP_FILETYPE_PNG,
00087   LIBMTP_FILETYPE_VCALENDAR1,
00088   LIBMTP_FILETYPE_VCALENDAR2,
00089   LIBMTP_FILETYPE_VCARD2,
00090   LIBMTP_FILETYPE_VCARD3,
00091   LIBMTP_FILETYPE_WINDOWSIMAGEFORMAT,
00092   LIBMTP_FILETYPE_WINEXEC,
00093   LIBMTP_FILETYPE_TEXT,
00094   LIBMTP_FILETYPE_HTML,
00095   LIBMTP_FILETYPE_FIRMWARE,
00096   LIBMTP_FILETYPE_AAC,
00097   LIBMTP_FILETYPE_MEDIACARD,
00098   LIBMTP_FILETYPE_FLAC,
00099   LIBMTP_FILETYPE_MP2,
00100   LIBMTP_FILETYPE_M4A,
00101   LIBMTP_FILETYPE_DOC,
00102   LIBMTP_FILETYPE_XML,
00103   LIBMTP_FILETYPE_XLS,
00104   LIBMTP_FILETYPE_PPT,
00105   LIBMTP_FILETYPE_MHT,
00106   LIBMTP_FILETYPE_JP2,
00107   LIBMTP_FILETYPE_JPX,
00108   LIBMTP_FILETYPE_UNKNOWN
00109 } LIBMTP_filetype_t;
00110 
00118 #define LIBMTP_FILETYPE_IS_AUDIO(a)\
00119 (a == LIBMTP_FILETYPE_WAV ||\
00120  a == LIBMTP_FILETYPE_MP3 ||\
00121  a == LIBMTP_FILETYPE_MP2 ||\
00122  a == LIBMTP_FILETYPE_WMA ||\
00123  a == LIBMTP_FILETYPE_OGG ||\
00124  a == LIBMTP_FILETYPE_FLAC ||\
00125  a == LIBMTP_FILETYPE_AAC ||\
00126  a == LIBMTP_FILETYPE_M4A ||\
00127  a == LIBMTP_FILETYPE_UNDEF_AUDIO)
00128 
00136 #define LIBMTP_FILETYPE_IS_VIDEO(a)\
00137 (a == LIBMTP_FILETYPE_WMV ||\
00138  a == LIBMTP_FILETYPE_AVI ||\
00139  a == LIBMTP_FILETYPE_MPEG ||\
00140  a == LIBMTP_FILETYPE_UNDEF_VIDEO)
00141 
00146 #define LIBMTP_FILETYPE_IS_AUDIOVIDEO(a)\
00147 (a == LIBMTP_FILETYPE_MP4 ||\
00148  a == LIBMTP_FILETYPE_ASF ||\
00149  a == LIBMTP_FILETYPE_QT)
00150 
00157 #define LIBMTP_FILETYPE_IS_TRACK(a)\
00158 (LIBMTP_FILETYPE_IS_AUDIO(a) ||\
00159  LIBMTP_FILETYPE_IS_VIDEO(a) ||\
00160  LIBMTP_FILETYPE_IS_AUDIOVIDEO(a))
00161 
00166 #define LIBMTP_FILETYPE_IS_IMAGE(a)\
00167 (a == LIBMTP_FILETYPE_JPEG ||\
00168 a == LIBMTP_FILETYPE_JFIF ||\
00169 a == LIBMTP_FILETYPE_TIFF ||\
00170 a == LIBMTP_FILETYPE_BMP ||\
00171 a == LIBMTP_FILETYPE_GIF ||\
00172 a == LIBMTP_FILETYPE_PICT ||\
00173 a == LIBMTP_FILETYPE_PNG ||\
00174 a == LIBMTP_FILETYPE_JP2 ||\
00175 a == LIBMTP_FILETYPE_JPX ||\
00176 a == LIBMTP_FILETYPE_WINDOWSIMAGEFORMAT)
00177 
00182 #define LIBMTP_FILETYPE_IS_ADDRESSBOOK(a)\
00183 (a == LIBMTP_FILETYPE_VCARD2 ||\
00184 a == LIBMTP_FILETYPE_VCARD2)
00185 
00190 #define LIBMTP_FILETYPE_IS_CALENDAR(a)\
00191 (a == LIBMTP_FILETYPE_VCALENDAR1 ||\
00192 a == LIBMTP_FILETYPE_VCALENDAR2)
00193 
00198 typedef enum {
00199   LIBMTP_ERROR_NONE,
00200   LIBMTP_ERROR_GENERAL,
00201   LIBMTP_ERROR_PTP_LAYER,
00202   LIBMTP_ERROR_USB_LAYER,
00203   LIBMTP_ERROR_MEMORY_ALLOCATION,
00204   LIBMTP_ERROR_NO_DEVICE_ATTACHED,
00205   LIBMTP_ERROR_STORAGE_FULL,
00206   LIBMTP_ERROR_CONNECTING,
00207   LIBMTP_ERROR_CANCELLED
00208 } LIBMTP_error_number_t;
00209 typedef struct LIBMTP_device_entry_struct LIBMTP_device_entry_t; 
00210 typedef struct LIBMTP_raw_device_struct LIBMTP_raw_device_t; 
00211 typedef struct LIBMTP_error_struct LIBMTP_error_t; 
00212 typedef struct LIBMTP_mtpdevice_struct LIBMTP_mtpdevice_t; 
00213 typedef struct LIBMTP_file_struct LIBMTP_file_t; 
00214 typedef struct LIBMTP_track_struct LIBMTP_track_t; 
00215 typedef struct LIBMTP_playlist_struct LIBMTP_playlist_t; 
00216 typedef struct LIBMTP_album_struct LIBMTP_album_t; 
00217 typedef struct LIBMTP_folder_struct LIBMTP_folder_t; 
00218 typedef struct LIBMTP_object_struct LIBMTP_object_t; 
00219 typedef struct LIBMTP_filesampledata_struct LIBMTP_filesampledata_t; 
00220 typedef struct LIBMTP_devicestorage_struct LIBMTP_devicestorage_t; 
00232 typedef int (* LIBMTP_progressfunc_t) (uint64_t const sent, uint64_t const total,
00233                                 void const * const data);
00234 
00244 struct LIBMTP_device_entry_struct {
00245   char *vendor; 
00246   uint16_t vendor_id; 
00247   char *product; 
00248   uint16_t product_id; 
00249   uint32_t device_flags; 
00250 };
00251 
00256 struct LIBMTP_raw_device_struct {
00257   LIBMTP_device_entry_t device_entry; 
00258   uint32_t bus_location; 
00259   uint8_t devnum; 
00260 };
00261 
00265 struct LIBMTP_error_struct {
00266   LIBMTP_error_number_t errornumber;
00267   char *error_text;
00268   LIBMTP_error_t *next;
00269 };
00270 
00274 struct LIBMTP_mtpdevice_struct {
00278   uint8_t object_bitsize;
00283   void *params;
00288   void *usbinfo;
00295   LIBMTP_devicestorage_t *storage;
00300   LIBMTP_error_t *errorstack;
00302   uint8_t maximum_battery_level;
00304   uint32_t default_music_folder;
00306   uint32_t default_playlist_folder;
00308   uint32_t default_picture_folder;
00310   uint32_t default_video_folder;
00312   uint32_t default_organizer_folder;
00314   uint32_t default_zencast_folder;
00316   uint32_t default_album_folder;
00318   uint32_t default_text_folder;
00320   void *cd;
00321   
00323   LIBMTP_mtpdevice_t *next;
00324 };
00325 
00329 struct LIBMTP_file_struct {
00330   uint32_t item_id; 
00331   uint32_t parent_id; 
00332   uint32_t storage_id; 
00333   char *filename; 
00334   uint64_t filesize; 
00335   LIBMTP_filetype_t filetype; 
00336   LIBMTP_file_t *next; 
00337 };
00338 
00342 struct LIBMTP_track_struct {
00343   uint32_t item_id; 
00344   uint32_t parent_id; 
00345   uint32_t storage_id; 
00346   char *title; 
00347   char *artist; 
00348   char *composer; 
00349   char *genre; 
00350   char *album; 
00351   char *date; 
00352   char *filename; 
00353   uint16_t tracknumber; 
00354   uint32_t duration; 
00355   uint32_t samplerate; 
00356   uint16_t nochannels; 
00357   uint32_t wavecodec; 
00358   uint32_t bitrate; 
00359   uint16_t bitratetype; 
00360   uint16_t rating; 
00361   uint32_t usecount; 
00362   uint64_t filesize; 
00363   LIBMTP_filetype_t filetype; 
00364   LIBMTP_track_t *next; 
00365 };
00366 
00370 struct LIBMTP_playlist_struct {
00371   uint32_t playlist_id; 
00372   uint32_t parent_id; 
00373   uint32_t storage_id; 
00374   char *name; 
00375   uint32_t *tracks; 
00376   uint32_t no_tracks; 
00377   LIBMTP_playlist_t *next; 
00378 };
00379 
00383 struct LIBMTP_album_struct {
00384   uint32_t album_id; 
00385   uint32_t parent_id; 
00386   uint32_t storage_id; 
00387   char *name; 
00388   char *artist; 
00389   char *composer; 
00390   char *genre; 
00391   uint32_t *tracks; 
00392   uint32_t no_tracks; 
00393   LIBMTP_album_t *next; 
00394 };
00395 
00399 struct LIBMTP_folder_struct {
00400   uint32_t folder_id; 
00401   uint32_t parent_id; 
00402   uint32_t storage_id; 
00403   char *name; 
00404   LIBMTP_folder_t *sibling; 
00405   LIBMTP_folder_t *child; 
00406 };
00407 
00411 struct LIBMTP_filesampledata_struct {
00412   uint32_t width; 
00413   uint32_t height; 
00414   uint32_t duration; 
00415   LIBMTP_filetype_t filetype; 
00416   uint64_t size; 
00417   char *data; 
00418 };
00419 
00423 struct LIBMTP_devicestorage_struct {
00424   uint32_t id; 
00425   uint16_t StorageType; 
00426   uint16_t FilesystemType; 
00427   uint16_t AccessCapability; 
00428   uint64_t MaxCapacity; 
00429   uint64_t FreeSpaceInBytes; 
00430   uint64_t FreeSpaceInObjects; 
00431   char *StorageDescription; 
00432   char *VolumeIdentifier; 
00433   LIBMTP_devicestorage_t *next; 
00434   LIBMTP_devicestorage_t *prev; 
00435 };
00436   
00437 
00440 /* Make functions available for C++ */
00441 #ifdef __cplusplus
00442 extern "C" {
00443 #endif
00444 
00449 void LIBMTP_Init(void);
00450 int LIBMTP_Get_Supported_Devices_List(LIBMTP_device_entry_t ** const, int * const);
00456 LIBMTP_error_number_t LIBMTP_Detect_Raw_Devices(LIBMTP_raw_device_t **, int *);
00457 LIBMTP_mtpdevice_t *LIBMTP_Open_Raw_Device(LIBMTP_raw_device_t *);
00458 /* Begin old, legacy interface */
00459 LIBMTP_mtpdevice_t *LIBMTP_Get_First_Device(void);
00460 LIBMTP_error_number_t LIBMTP_Get_Connected_Devices(LIBMTP_mtpdevice_t **);
00461 uint32_t LIBMTP_Number_Devices_In_List(LIBMTP_mtpdevice_t *);
00462 void LIBMTP_Release_Device_List(LIBMTP_mtpdevice_t*);
00463 /* End old, legacy interface */
00464 void LIBMTP_Release_Device(LIBMTP_mtpdevice_t*);
00465 void LIBMTP_Dump_Device_Info(LIBMTP_mtpdevice_t*);
00466 int LIBMTP_Reset_Device(LIBMTP_mtpdevice_t*);
00467 char *LIBMTP_Get_Manufacturername(LIBMTP_mtpdevice_t*);
00468 char *LIBMTP_Get_Modelname(LIBMTP_mtpdevice_t*);
00469 char *LIBMTP_Get_Serialnumber(LIBMTP_mtpdevice_t*);
00470 char *LIBMTP_Get_Deviceversion(LIBMTP_mtpdevice_t*);
00471 char *LIBMTP_Get_Friendlyname(LIBMTP_mtpdevice_t*);
00472 int LIBMTP_Set_Friendlyname(LIBMTP_mtpdevice_t*, char const * const);
00473 char *LIBMTP_Get_Syncpartner(LIBMTP_mtpdevice_t*);
00474 int LIBMTP_Set_Syncpartner(LIBMTP_mtpdevice_t*, char const * const);
00475 int LIBMTP_Get_Batterylevel(LIBMTP_mtpdevice_t *,
00476                             uint8_t * const,
00477                             uint8_t * const);
00478 int LIBMTP_Get_Secure_Time(LIBMTP_mtpdevice_t *, char ** const);
00479 int LIBMTP_Get_Device_Certificate(LIBMTP_mtpdevice_t *, char ** const);
00480 int LIBMTP_Get_Supported_Filetypes(LIBMTP_mtpdevice_t *, uint16_t ** const, uint16_t * const);
00481 LIBMTP_error_t *LIBMTP_Get_Errorstack(LIBMTP_mtpdevice_t*);
00482 void LIBMTP_Clear_Errorstack(LIBMTP_mtpdevice_t*);
00483 void LIBMTP_Dump_Errorstack(LIBMTP_mtpdevice_t*);
00484 
00485 #define LIBMTP_STORAGE_SORTBY_NOTSORTED 0
00486 #define LIBMTP_STORAGE_SORTBY_FREESPACE 1
00487 #define LIBMTP_STORAGE_SORTBY_MAXSPACE  2
00488 
00489 int LIBMTP_Get_Storage(LIBMTP_mtpdevice_t *, int const);
00490 int LIBMTP_Format_Storage(LIBMTP_mtpdevice_t *, LIBMTP_devicestorage_t *);
00491 
00492 
00498 LIBMTP_file_t *LIBMTP_new_file_t(void);
00499 void LIBMTP_destroy_file_t(LIBMTP_file_t*);
00500 char const * LIBMTP_Get_Filetype_Description(LIBMTP_filetype_t);
00501 LIBMTP_file_t *LIBMTP_Get_Filelisting(LIBMTP_mtpdevice_t *);
00502 LIBMTP_file_t *LIBMTP_Get_Filelisting_With_Callback(LIBMTP_mtpdevice_t *,
00503       LIBMTP_progressfunc_t const, void const * const);
00504 LIBMTP_file_t *LIBMTP_Get_Filemetadata(LIBMTP_mtpdevice_t *, uint32_t const);
00505 int LIBMTP_Get_File_To_File(LIBMTP_mtpdevice_t*, uint32_t, char const * const,
00506                         LIBMTP_progressfunc_t const, void const * const);
00507 int LIBMTP_Get_File_To_File_Descriptor(LIBMTP_mtpdevice_t*, uint32_t const, int const,
00508                         LIBMTP_progressfunc_t const, void const * const);
00509 int LIBMTP_Send_File_From_File(LIBMTP_mtpdevice_t *, char const * const,
00510                          LIBMTP_file_t * const, LIBMTP_progressfunc_t const,
00511                          void const * const);
00512 int LIBMTP_Send_File_From_File_Descriptor(LIBMTP_mtpdevice_t *, int const,
00513                         LIBMTP_file_t * const, LIBMTP_progressfunc_t const,
00514                         void const * const);
00515 int LIBMTP_Set_File_Name(LIBMTP_mtpdevice_t *, LIBMTP_file_t *, const char *);
00516 LIBMTP_filesampledata_t *LIBMTP_new_filesampledata_t(void);
00517 void LIBMTP_destroy_filesampledata_t(LIBMTP_filesampledata_t *);
00518 int LIBMTP_Get_Representative_Sample_Format(LIBMTP_mtpdevice_t *,
00519                         LIBMTP_filetype_t const,
00520                         LIBMTP_filesampledata_t **);
00521 int LIBMTP_Send_Representative_Sample(LIBMTP_mtpdevice_t *, uint32_t const,
00522                           LIBMTP_filesampledata_t *);
00523 int LIBMTP_Get_Representative_Sample(LIBMTP_mtpdevice_t *, uint32_t const,
00524                           LIBMTP_filesampledata_t *);
00525 
00531 LIBMTP_track_t *LIBMTP_new_track_t(void);
00532 void LIBMTP_destroy_track_t(LIBMTP_track_t*);
00533 LIBMTP_track_t *LIBMTP_Get_Tracklisting(LIBMTP_mtpdevice_t*);
00534 LIBMTP_track_t *LIBMTP_Get_Tracklisting_With_Callback(LIBMTP_mtpdevice_t*,
00535       LIBMTP_progressfunc_t const, void const * const);
00536 LIBMTP_track_t *LIBMTP_Get_Trackmetadata(LIBMTP_mtpdevice_t*, uint32_t const);
00537 int LIBMTP_Get_Track_To_File(LIBMTP_mtpdevice_t*, uint32_t, char const * const,
00538                         LIBMTP_progressfunc_t const, void const * const);
00539 int LIBMTP_Get_Track_To_File_Descriptor(LIBMTP_mtpdevice_t*, uint32_t const, int const,
00540                         LIBMTP_progressfunc_t const, void const * const);
00541 int LIBMTP_Send_Track_From_File(LIBMTP_mtpdevice_t *,
00542                          char const * const, LIBMTP_track_t * const,
00543                          LIBMTP_progressfunc_t const,
00544                          void const * const);
00545 int LIBMTP_Send_Track_From_File_Descriptor(LIBMTP_mtpdevice_t *,
00546                          int const, LIBMTP_track_t * const,
00547                          LIBMTP_progressfunc_t const,
00548                          void const * const);
00549 int LIBMTP_Update_Track_Metadata(LIBMTP_mtpdevice_t *,
00550                         LIBMTP_track_t const * const);
00551 int LIBMTP_Track_Exists(LIBMTP_mtpdevice_t *, uint32_t);
00552 int LIBMTP_Set_Track_Name(LIBMTP_mtpdevice_t *, LIBMTP_track_t *, const char *);
00560 LIBMTP_folder_t *LIBMTP_new_folder_t(void);
00561 void LIBMTP_destroy_folder_t(LIBMTP_folder_t*);
00562 LIBMTP_folder_t *LIBMTP_Get_Folder_List(LIBMTP_mtpdevice_t*);
00563 LIBMTP_folder_t *LIBMTP_Find_Folder(LIBMTP_folder_t*, uint32_t const);
00564 uint32_t LIBMTP_Create_Folder(LIBMTP_mtpdevice_t*, char *, uint32_t, uint32_t);
00565 int LIBMTP_Set_Folder_Name(LIBMTP_mtpdevice_t *, LIBMTP_folder_t *, const char *);
00574 LIBMTP_playlist_t *LIBMTP_new_playlist_t(void);
00575 void LIBMTP_destroy_playlist_t(LIBMTP_playlist_t *);
00576 LIBMTP_playlist_t *LIBMTP_Get_Playlist_List(LIBMTP_mtpdevice_t *);
00577 LIBMTP_playlist_t *LIBMTP_Get_Playlist(LIBMTP_mtpdevice_t *, uint32_t const);
00578 int LIBMTP_Create_New_Playlist(LIBMTP_mtpdevice_t *, LIBMTP_playlist_t * const);
00579 int LIBMTP_Update_Playlist(LIBMTP_mtpdevice_t *, LIBMTP_playlist_t * const);
00580 int LIBMTP_Set_Playlist_Name(LIBMTP_mtpdevice_t *, LIBMTP_playlist_t *, const char *);
00581 
00587 LIBMTP_album_t *LIBMTP_new_album_t(void);
00588 void LIBMTP_destroy_album_t(LIBMTP_album_t *);
00589 LIBMTP_album_t *LIBMTP_Get_Album_List(LIBMTP_mtpdevice_t *);
00590 LIBMTP_album_t *LIBMTP_Get_Album(LIBMTP_mtpdevice_t *, uint32_t const);
00591 int LIBMTP_Create_New_Album(LIBMTP_mtpdevice_t *, LIBMTP_album_t * const);
00592 int LIBMTP_Update_Album(LIBMTP_mtpdevice_t *, LIBMTP_album_t const * const);
00593 int LIBMTP_Set_Album_Name(LIBMTP_mtpdevice_t *, LIBMTP_album_t *, const char *);
00594 
00600 int LIBMTP_Delete_Object(LIBMTP_mtpdevice_t *, uint32_t);
00601 int LIBMTP_Set_Object_Filename(LIBMTP_mtpdevice_t *, uint32_t , char *);
00602 
00605 /* End of C++ exports */
00606 #ifdef __cplusplus
00607 }
00608 #endif
00609 
00610 #endif /* LIBMTP_H_INCLUSION_GUARD */
00611 

Generated on Sun Aug 23 04:57:14 2009 for libmtp by  doxygen 1.5.8