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.0
00033 #define LIBMTP_VERSION_STRING "0.3.0"
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 #endif
00042 
00043 #include <stdio.h>
00044 #include <usb.h>
00045 #include <stdint.h>
00046 
00047 #ifdef __WIN32__
00048 /*
00049  * Windows specific code, types that do not exist in Windows
00050  * sys/types.h
00051  */
00052 typedef char int8_t;
00053 typedef unsigned char uint8_t;
00054 typedef __int16 int16_t;
00055 typedef unsigned __int16 uint16_t;
00056 typedef __int32 int32_t;
00057 typedef unsigned __int32 uint32_t;
00058 typedef unsigned __int64 uint64_t;
00059 #endif
00060 
00068 typedef enum {
00069   LIBMTP_FILETYPE_WAV,
00070   LIBMTP_FILETYPE_MP3,
00071   LIBMTP_FILETYPE_WMA,
00072   LIBMTP_FILETYPE_OGG,
00073   LIBMTP_FILETYPE_AUDIBLE,
00074   LIBMTP_FILETYPE_MP4,
00075   LIBMTP_FILETYPE_UNDEF_AUDIO,
00076   LIBMTP_FILETYPE_WMV,
00077   LIBMTP_FILETYPE_AVI,
00078   LIBMTP_FILETYPE_MPEG,
00079   LIBMTP_FILETYPE_ASF,
00080   LIBMTP_FILETYPE_QT,
00081   LIBMTP_FILETYPE_UNDEF_VIDEO,
00082   LIBMTP_FILETYPE_JPEG,
00083   LIBMTP_FILETYPE_JFIF,
00084   LIBMTP_FILETYPE_TIFF,
00085   LIBMTP_FILETYPE_BMP,
00086   LIBMTP_FILETYPE_GIF,
00087   LIBMTP_FILETYPE_PICT,
00088   LIBMTP_FILETYPE_PNG,
00089   LIBMTP_FILETYPE_VCALENDAR1,
00090   LIBMTP_FILETYPE_VCALENDAR2,
00091   LIBMTP_FILETYPE_VCARD2,
00092   LIBMTP_FILETYPE_VCARD3,
00093   LIBMTP_FILETYPE_WINDOWSIMAGEFORMAT,
00094   LIBMTP_FILETYPE_WINEXEC,
00095   LIBMTP_FILETYPE_TEXT,
00096   LIBMTP_FILETYPE_HTML,
00097   LIBMTP_FILETYPE_FIRMWARE,
00098   LIBMTP_FILETYPE_AAC,
00099   LIBMTP_FILETYPE_MEDIACARD,
00100   LIBMTP_FILETYPE_FLAC,
00101   LIBMTP_FILETYPE_MP2,
00102   LIBMTP_FILETYPE_M4A,
00103   LIBMTP_FILETYPE_DOC,
00104   LIBMTP_FILETYPE_XML,
00105   LIBMTP_FILETYPE_XLS,
00106   LIBMTP_FILETYPE_PPT,
00107   LIBMTP_FILETYPE_MHT,
00108   LIBMTP_FILETYPE_JP2,
00109   LIBMTP_FILETYPE_JPX,
00110   LIBMTP_FILETYPE_UNKNOWN
00111 } LIBMTP_filetype_t;
00112 
00116 #define LIBMTP_FILETYPE_IS_AUDIO(a)\
00117 (a == LIBMTP_FILETYPE_WAV ||\
00118  a == LIBMTP_FILETYPE_MP3 ||\
00119  a == LIBMTP_FILETYPE_MP2 ||\
00120  a == LIBMTP_FILETYPE_WMA ||\
00121  a == LIBMTP_FILETYPE_OGG ||\
00122  a == LIBMTP_FILETYPE_FLAC ||\
00123  a == LIBMTP_FILETYPE_AAC ||\
00124  a == LIBMTP_FILETYPE_M4A ||\
00125  a == LIBMTP_FILETYPE_UNDEF_AUDIO)
00126 #define LIBMTP_FILETYPE_IS_VIDEO(a)\
00127 (a == LIBMTP_FILETYPE_WMV ||\
00128  a == LIBMTP_FILETYPE_AVI ||\
00129  a == LIBMTP_FILETYPE_MPEG ||\
00130  a == LIBMTP_FILETYPE_UNDEF_VIDEO)
00131 #define LIBMTP_FILETYPE_IS_AUDIOVIDEO(a)\
00132 (a == LIBMTP_FILETYPE_MP4 ||\
00133  a == LIBMTP_FILETYPE_ASF ||\
00134  a == LIBMTP_FILETYPE_QT)
00135 #define LIBMTP_FILETYPE_IS_TRACK(a)\
00136 (LIBMTP_FILETYPE_IS_AUDIO(a) ||\
00137  LIBMTP_FILETYPE_IS_VIDEO(a) ||\
00138  LIBMTP_FILETYPE_IS_AUDIOVIDEO(a))
00139 
00144 typedef enum {
00145   LIBMTP_ERROR_NONE,
00146   LIBMTP_ERROR_GENERAL,
00147   LIBMTP_ERROR_PTP_LAYER,
00148   LIBMTP_ERROR_USB_LAYER,
00149   LIBMTP_ERROR_MEMORY_ALLOCATION,
00150   LIBMTP_ERROR_NO_DEVICE_ATTACHED,
00151   LIBMTP_ERROR_STORAGE_FULL,
00152   LIBMTP_ERROR_CONNECTING,
00153   LIBMTP_ERROR_CANCELLED
00154 } LIBMTP_error_number_t;
00155 typedef struct LIBMTP_device_entry_struct LIBMTP_device_entry_t; 
00156 typedef struct LIBMTP_raw_device_struct LIBMTP_raw_device_t; 
00157 typedef struct LIBMTP_error_struct LIBMTP_error_t; 
00158 typedef struct LIBMTP_mtpdevice_struct LIBMTP_mtpdevice_t; 
00159 typedef struct LIBMTP_file_struct LIBMTP_file_t; 
00160 typedef struct LIBMTP_track_struct LIBMTP_track_t; 
00161 typedef struct LIBMTP_playlist_struct LIBMTP_playlist_t; 
00162 typedef struct LIBMTP_album_struct LIBMTP_album_t; 
00163 typedef struct LIBMTP_folder_struct LIBMTP_folder_t; 
00164 typedef struct LIBMTP_object_struct LIBMTP_object_t; 
00165 typedef struct LIBMTP_filesampledata_struct LIBMTP_filesampledata_t; 
00166 typedef struct LIBMTP_devicestorage_struct LIBMTP_devicestorage_t; 
00178 typedef int (* LIBMTP_progressfunc_t) (uint64_t const sent, uint64_t const total,
00179                                 void const * const data);
00180 
00190 struct LIBMTP_device_entry_struct {
00191   char *vendor; 
00192   uint16_t vendor_id; 
00193   char *product; 
00194   uint16_t product_id; 
00195   uint32_t device_flags; 
00196 };
00197 
00202 struct LIBMTP_raw_device_struct {
00203   LIBMTP_device_entry_t device_entry; 
00204   uint32_t bus_location; 
00205   uint8_t devnum; 
00206 };
00207 
00211 struct LIBMTP_error_struct {
00212   LIBMTP_error_number_t errornumber;
00213   char *error_text;
00214   LIBMTP_error_t *next;
00215 };
00216 
00220 struct LIBMTP_mtpdevice_struct {
00224   uint8_t object_bitsize;
00229   void *params;
00234   void *usbinfo;
00241   LIBMTP_devicestorage_t *storage;
00246   LIBMTP_error_t *errorstack;
00248   uint8_t maximum_battery_level;
00250   uint32_t default_music_folder;
00252   uint32_t default_playlist_folder;
00254   uint32_t default_picture_folder;
00256   uint32_t default_video_folder;
00258   uint32_t default_organizer_folder;
00260   uint32_t default_zencast_folder;
00262   uint32_t default_album_folder;
00264   uint32_t default_text_folder;
00266   void *cd;
00267   
00269   LIBMTP_mtpdevice_t *next;
00270 };
00271 
00275 struct LIBMTP_file_struct {
00276   uint32_t item_id; 
00277   uint32_t parent_id; 
00278   uint32_t storage_id; 
00279   char *filename; 
00280   uint64_t filesize; 
00281   LIBMTP_filetype_t filetype; 
00282   LIBMTP_file_t *next; 
00283 };
00284 
00288 struct LIBMTP_track_struct {
00289   uint32_t item_id; 
00290   uint32_t parent_id; 
00291   uint32_t storage_id; 
00292   char *title; 
00293   char *artist; 
00294   char *composer; 
00295   char *genre; 
00296   char *album; 
00297   char *date; 
00298   char *filename; 
00299   uint16_t tracknumber; 
00300   uint32_t duration; 
00301   uint32_t samplerate; 
00302   uint16_t nochannels; 
00303   uint32_t wavecodec; 
00304   uint32_t bitrate; 
00305   uint16_t bitratetype; 
00306   uint16_t rating; 
00307   uint32_t usecount; 
00308   uint64_t filesize; 
00309   LIBMTP_filetype_t filetype; 
00310   LIBMTP_track_t *next; 
00311 };
00312 
00316 struct LIBMTP_playlist_struct {
00317   uint32_t playlist_id; 
00318   uint32_t parent_id; 
00319   uint32_t storage_id; 
00320   char *name; 
00321   uint32_t *tracks; 
00322   uint32_t no_tracks; 
00323   LIBMTP_playlist_t *next; 
00324 };
00325 
00329 struct LIBMTP_album_struct {
00330   uint32_t album_id; 
00331   uint32_t parent_id; 
00332   uint32_t storage_id; 
00333   char *name; 
00334   char *artist; 
00335   char *composer; 
00336   char *genre; 
00337   uint32_t *tracks; 
00338   uint32_t no_tracks; 
00339   LIBMTP_album_t *next; 
00340 };
00341 
00345 struct LIBMTP_folder_struct {
00346   uint32_t folder_id; 
00347   uint32_t parent_id; 
00348   uint32_t storage_id; 
00349   char *name; 
00350   LIBMTP_folder_t *sibling; 
00351   LIBMTP_folder_t *child; 
00352 };
00353 
00357 struct LIBMTP_filesampledata_struct {
00358   uint32_t width; 
00359   uint32_t height; 
00360   uint32_t duration; 
00361   LIBMTP_filetype_t filetype; 
00362   uint64_t size; 
00363   char *data; 
00364 };
00365 
00369 struct LIBMTP_devicestorage_struct {
00370   uint32_t id; 
00371   uint16_t StorageType; 
00372   uint16_t FilesystemType; 
00373   uint16_t AccessCapability; 
00374   uint64_t MaxCapacity; 
00375   uint64_t FreeSpaceInBytes; 
00376   uint64_t FreeSpaceInObjects; 
00377   char *StorageDescription; 
00378   char *VolumeIdentifier; 
00379   LIBMTP_devicestorage_t *next; 
00380   LIBMTP_devicestorage_t *prev; 
00381 };
00382   
00383 
00386 /* Make functions available for C++ */
00387 #ifdef __cplusplus
00388 extern "C" {
00389 #endif
00390 
00395 void LIBMTP_Init(void);
00396 int LIBMTP_Get_Supported_Devices_List(LIBMTP_device_entry_t ** const, int * const);
00402 LIBMTP_error_number_t LIBMTP_Detect_Raw_Devices(LIBMTP_raw_device_t **, int *);
00403 LIBMTP_mtpdevice_t *LIBMTP_Open_Raw_Device(LIBMTP_raw_device_t *);
00404 /* Begin old, legacy interface */
00405 LIBMTP_mtpdevice_t *LIBMTP_Get_First_Device(void);
00406 LIBMTP_error_number_t LIBMTP_Get_Connected_Devices(LIBMTP_mtpdevice_t **);
00407 uint32_t LIBMTP_Number_Devices_In_List(LIBMTP_mtpdevice_t *);
00408 void LIBMTP_Release_Device_List(LIBMTP_mtpdevice_t*);
00409 /* End old, legacy interface */
00410 void LIBMTP_Release_Device(LIBMTP_mtpdevice_t*);
00411 void LIBMTP_Dump_Device_Info(LIBMTP_mtpdevice_t*);
00412 int LIBMTP_Reset_Device(LIBMTP_mtpdevice_t*);
00413 char *LIBMTP_Get_Manufacturername(LIBMTP_mtpdevice_t*);
00414 char *LIBMTP_Get_Modelname(LIBMTP_mtpdevice_t*);
00415 char *LIBMTP_Get_Serialnumber(LIBMTP_mtpdevice_t*);
00416 char *LIBMTP_Get_Deviceversion(LIBMTP_mtpdevice_t*);
00417 char *LIBMTP_Get_Friendlyname(LIBMTP_mtpdevice_t*);
00418 int LIBMTP_Set_Friendlyname(LIBMTP_mtpdevice_t*, char const * const);
00419 char *LIBMTP_Get_Syncpartner(LIBMTP_mtpdevice_t*);
00420 int LIBMTP_Set_Syncpartner(LIBMTP_mtpdevice_t*, char const * const);
00421 int LIBMTP_Get_Batterylevel(LIBMTP_mtpdevice_t *,
00422                             uint8_t * const,
00423                             uint8_t * const);
00424 int LIBMTP_Get_Secure_Time(LIBMTP_mtpdevice_t *, char ** const);
00425 int LIBMTP_Get_Device_Certificate(LIBMTP_mtpdevice_t *, char ** const);
00426 int LIBMTP_Get_Supported_Filetypes(LIBMTP_mtpdevice_t *, uint16_t ** const, uint16_t * const);
00427 LIBMTP_error_t *LIBMTP_Get_Errorstack(LIBMTP_mtpdevice_t*);
00428 void LIBMTP_Clear_Errorstack(LIBMTP_mtpdevice_t*);
00429 void LIBMTP_Dump_Errorstack(LIBMTP_mtpdevice_t*);
00430 
00431 #define LIBMTP_STORAGE_SORTBY_NOTSORTED 0
00432 #define LIBMTP_STORAGE_SORTBY_FREESPACE 1
00433 #define LIBMTP_STORAGE_SORTBY_MAXSPACE  2
00434 
00435 int LIBMTP_Get_Storage(LIBMTP_mtpdevice_t *, int const);
00436 int LIBMTP_Format_Storage(LIBMTP_mtpdevice_t *, LIBMTP_devicestorage_t *);
00437 
00438 
00444 LIBMTP_file_t *LIBMTP_new_file_t(void);
00445 void LIBMTP_destroy_file_t(LIBMTP_file_t*);
00446 char const * LIBMTP_Get_Filetype_Description(LIBMTP_filetype_t);
00447 LIBMTP_file_t *LIBMTP_Get_Filelisting(LIBMTP_mtpdevice_t *);
00448 LIBMTP_file_t *LIBMTP_Get_Filelisting_With_Callback(LIBMTP_mtpdevice_t *,
00449       LIBMTP_progressfunc_t const, void const * const);
00450 LIBMTP_file_t *LIBMTP_Get_Filemetadata(LIBMTP_mtpdevice_t *, uint32_t const);
00451 int LIBMTP_Get_File_To_File(LIBMTP_mtpdevice_t*, uint32_t, char const * const,
00452                         LIBMTP_progressfunc_t const, void const * const);
00453 int LIBMTP_Get_File_To_File_Descriptor(LIBMTP_mtpdevice_t*, uint32_t const, int const,
00454                         LIBMTP_progressfunc_t const, void const * const);
00455 int LIBMTP_Send_File_From_File(LIBMTP_mtpdevice_t *, char const * const,
00456                          LIBMTP_file_t * const, LIBMTP_progressfunc_t const,
00457                          void const * const);
00458 int LIBMTP_Send_File_From_File_Descriptor(LIBMTP_mtpdevice_t *, int const,
00459                         LIBMTP_file_t * const, LIBMTP_progressfunc_t const,
00460                         void const * const);
00461 LIBMTP_filesampledata_t *LIBMTP_new_filesampledata_t(void);
00462 void LIBMTP_destroy_filesampledata_t(LIBMTP_filesampledata_t *);
00463 int LIBMTP_Get_Representative_Sample_Format(LIBMTP_mtpdevice_t *,
00464                         LIBMTP_filetype_t const,
00465                         LIBMTP_filesampledata_t **);
00466 int LIBMTP_Send_Representative_Sample(LIBMTP_mtpdevice_t *, uint32_t const,
00467                           LIBMTP_filesampledata_t *);
00468 int LIBMTP_Get_Representative_Sample(LIBMTP_mtpdevice_t *, uint32_t const,
00469                           LIBMTP_filesampledata_t *);
00470 
00476 LIBMTP_track_t *LIBMTP_new_track_t(void);
00477 void LIBMTP_destroy_track_t(LIBMTP_track_t*);
00478 LIBMTP_track_t *LIBMTP_Get_Tracklisting(LIBMTP_mtpdevice_t*);
00479 LIBMTP_track_t *LIBMTP_Get_Tracklisting_With_Callback(LIBMTP_mtpdevice_t*,
00480       LIBMTP_progressfunc_t const, void const * const);
00481 LIBMTP_track_t *LIBMTP_Get_Trackmetadata(LIBMTP_mtpdevice_t*, uint32_t const);
00482 int LIBMTP_Get_Track_To_File(LIBMTP_mtpdevice_t*, uint32_t, char const * const,
00483                         LIBMTP_progressfunc_t const, void const * const);
00484 int LIBMTP_Get_Track_To_File_Descriptor(LIBMTP_mtpdevice_t*, uint32_t const, int const,
00485                         LIBMTP_progressfunc_t const, void const * const);
00486 int LIBMTP_Send_Track_From_File(LIBMTP_mtpdevice_t *,
00487                          char const * const, LIBMTP_track_t * const,
00488                          LIBMTP_progressfunc_t const,
00489                          void const * const);
00490 int LIBMTP_Send_Track_From_File_Descriptor(LIBMTP_mtpdevice_t *,
00491                          int const, LIBMTP_track_t * const,
00492                          LIBMTP_progressfunc_t const,
00493                          void const * const);
00494 int LIBMTP_Update_Track_Metadata(LIBMTP_mtpdevice_t *,
00495                         LIBMTP_track_t const * const);
00496 int LIBMTP_Track_Exists(LIBMTP_mtpdevice_t *, uint32_t);
00504 LIBMTP_folder_t *LIBMTP_new_folder_t(void);
00505 void LIBMTP_destroy_folder_t(LIBMTP_folder_t*);
00506 LIBMTP_folder_t *LIBMTP_Get_Folder_List(LIBMTP_mtpdevice_t*);
00507 LIBMTP_folder_t *LIBMTP_Find_Folder(LIBMTP_folder_t*, uint32_t const);
00508 uint32_t LIBMTP_Create_Folder(LIBMTP_mtpdevice_t*, char *, uint32_t, uint32_t);
00517 LIBMTP_playlist_t *LIBMTP_new_playlist_t(void);
00518 void LIBMTP_destroy_playlist_t(LIBMTP_playlist_t *);
00519 LIBMTP_playlist_t *LIBMTP_Get_Playlist_List(LIBMTP_mtpdevice_t *);
00520 LIBMTP_playlist_t *LIBMTP_Get_Playlist(LIBMTP_mtpdevice_t *, uint32_t const);
00521 int LIBMTP_Create_New_Playlist(LIBMTP_mtpdevice_t *, LIBMTP_playlist_t * const);
00522 int LIBMTP_Update_Playlist(LIBMTP_mtpdevice_t *, LIBMTP_playlist_t const * const);
00523 
00529 LIBMTP_album_t *LIBMTP_new_album_t(void);
00530 void LIBMTP_destroy_album_t(LIBMTP_album_t *);
00531 LIBMTP_album_t *LIBMTP_Get_Album_List(LIBMTP_mtpdevice_t *);
00532 LIBMTP_album_t *LIBMTP_Get_Album(LIBMTP_mtpdevice_t *, uint32_t const);
00533 int LIBMTP_Create_New_Album(LIBMTP_mtpdevice_t *, LIBMTP_album_t * const);
00534 int LIBMTP_Update_Album(LIBMTP_mtpdevice_t *, LIBMTP_album_t const * const);
00535 
00541 int LIBMTP_Delete_Object(LIBMTP_mtpdevice_t *, uint32_t);
00542 int LIBMTP_Set_Object_Filename(LIBMTP_mtpdevice_t *, uint32_t , char *);
00543 
00546 /* End of C++ exports */
00547 #ifdef __cplusplus
00548 }
00549 #endif
00550 
00551 #endif /* LIBMTP_H_INCLUSION_GUARD */
00552 

Generated on Tue Jun 12 16:44:58 2012 for libmtp by  doxygen 1.4.6