libmtp 1.1.12
|
00001 00029 #ifndef LIBMTP_H_INCLUSION_GUARD 00030 #define LIBMTP_H_INCLUSION_GUARD 00031 00032 #define LIBMTP_VERSION 1.1.12 00033 #define LIBMTP_VERSION_STRING "1.1.12" 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 #else 00054 #include <sys/time.h> 00055 #endif 00056 00057 #include <stdio.h> 00058 #include <stdint.h> 00059 /* We use time_t */ 00060 #include <time.h> 00061 00073 #define LIBMTP_DEBUG_NONE 0x00 00074 #define LIBMTP_DEBUG_PTP 0x01 00075 #define LIBMTP_DEBUG_PLST 0x02 00076 #define LIBMTP_DEBUG_USB 0x04 00077 #define LIBMTP_DEBUG_DATA 0x08 00078 #define LIBMTP_DEBUG_ALL 0xFF 00079 00080 00086 typedef enum { 00087 LIBMTP_FILETYPE_FOLDER, 00088 LIBMTP_FILETYPE_WAV, 00089 LIBMTP_FILETYPE_MP3, 00090 LIBMTP_FILETYPE_WMA, 00091 LIBMTP_FILETYPE_OGG, 00092 LIBMTP_FILETYPE_AUDIBLE, 00093 LIBMTP_FILETYPE_MP4, 00094 LIBMTP_FILETYPE_UNDEF_AUDIO, 00095 LIBMTP_FILETYPE_WMV, 00096 LIBMTP_FILETYPE_AVI, 00097 LIBMTP_FILETYPE_MPEG, 00098 LIBMTP_FILETYPE_ASF, 00099 LIBMTP_FILETYPE_QT, 00100 LIBMTP_FILETYPE_UNDEF_VIDEO, 00101 LIBMTP_FILETYPE_JPEG, 00102 LIBMTP_FILETYPE_JFIF, 00103 LIBMTP_FILETYPE_TIFF, 00104 LIBMTP_FILETYPE_BMP, 00105 LIBMTP_FILETYPE_GIF, 00106 LIBMTP_FILETYPE_PICT, 00107 LIBMTP_FILETYPE_PNG, 00108 LIBMTP_FILETYPE_VCALENDAR1, 00109 LIBMTP_FILETYPE_VCALENDAR2, 00110 LIBMTP_FILETYPE_VCARD2, 00111 LIBMTP_FILETYPE_VCARD3, 00112 LIBMTP_FILETYPE_WINDOWSIMAGEFORMAT, 00113 LIBMTP_FILETYPE_WINEXEC, 00114 LIBMTP_FILETYPE_TEXT, 00115 LIBMTP_FILETYPE_HTML, 00116 LIBMTP_FILETYPE_FIRMWARE, 00117 LIBMTP_FILETYPE_AAC, 00118 LIBMTP_FILETYPE_MEDIACARD, 00119 LIBMTP_FILETYPE_FLAC, 00120 LIBMTP_FILETYPE_MP2, 00121 LIBMTP_FILETYPE_M4A, 00122 LIBMTP_FILETYPE_DOC, 00123 LIBMTP_FILETYPE_XML, 00124 LIBMTP_FILETYPE_XLS, 00125 LIBMTP_FILETYPE_PPT, 00126 LIBMTP_FILETYPE_MHT, 00127 LIBMTP_FILETYPE_JP2, 00128 LIBMTP_FILETYPE_JPX, 00129 LIBMTP_FILETYPE_ALBUM, 00130 LIBMTP_FILETYPE_PLAYLIST, 00131 LIBMTP_FILETYPE_UNKNOWN 00132 } LIBMTP_filetype_t; 00133 00141 #define LIBMTP_FILETYPE_IS_AUDIO(a)\ 00142 (a == LIBMTP_FILETYPE_WAV ||\ 00143 a == LIBMTP_FILETYPE_MP3 ||\ 00144 a == LIBMTP_FILETYPE_MP2 ||\ 00145 a == LIBMTP_FILETYPE_WMA ||\ 00146 a == LIBMTP_FILETYPE_OGG ||\ 00147 a == LIBMTP_FILETYPE_FLAC ||\ 00148 a == LIBMTP_FILETYPE_AAC ||\ 00149 a == LIBMTP_FILETYPE_M4A ||\ 00150 a == LIBMTP_FILETYPE_AUDIBLE ||\ 00151 a == LIBMTP_FILETYPE_UNDEF_AUDIO) 00152 00160 #define LIBMTP_FILETYPE_IS_VIDEO(a)\ 00161 (a == LIBMTP_FILETYPE_WMV ||\ 00162 a == LIBMTP_FILETYPE_AVI ||\ 00163 a == LIBMTP_FILETYPE_MPEG ||\ 00164 a == LIBMTP_FILETYPE_UNDEF_VIDEO) 00165 00170 #define LIBMTP_FILETYPE_IS_AUDIOVIDEO(a)\ 00171 (a == LIBMTP_FILETYPE_MP4 ||\ 00172 a == LIBMTP_FILETYPE_ASF ||\ 00173 a == LIBMTP_FILETYPE_QT) 00174 00181 #define LIBMTP_FILETYPE_IS_TRACK(a)\ 00182 (LIBMTP_FILETYPE_IS_AUDIO(a) ||\ 00183 LIBMTP_FILETYPE_IS_VIDEO(a) ||\ 00184 LIBMTP_FILETYPE_IS_AUDIOVIDEO(a)) 00185 00190 #define LIBMTP_FILETYPE_IS_IMAGE(a)\ 00191 (a == LIBMTP_FILETYPE_JPEG ||\ 00192 a == LIBMTP_FILETYPE_JFIF ||\ 00193 a == LIBMTP_FILETYPE_TIFF ||\ 00194 a == LIBMTP_FILETYPE_BMP ||\ 00195 a == LIBMTP_FILETYPE_GIF ||\ 00196 a == LIBMTP_FILETYPE_PICT ||\ 00197 a == LIBMTP_FILETYPE_PNG ||\ 00198 a == LIBMTP_FILETYPE_JP2 ||\ 00199 a == LIBMTP_FILETYPE_JPX ||\ 00200 a == LIBMTP_FILETYPE_WINDOWSIMAGEFORMAT) 00201 00206 #define LIBMTP_FILETYPE_IS_ADDRESSBOOK(a)\ 00207 (a == LIBMTP_FILETYPE_VCARD2 ||\ 00208 a == LIBMTP_FILETYPE_VCARD3) 00209 00214 #define LIBMTP_FILETYPE_IS_CALENDAR(a)\ 00215 (a == LIBMTP_FILETYPE_VCALENDAR1 ||\ 00216 a == LIBMTP_FILETYPE_VCALENDAR2) 00217 00222 typedef enum { 00223 LIBMTP_PROPERTY_StorageID, 00224 LIBMTP_PROPERTY_ObjectFormat, 00225 LIBMTP_PROPERTY_ProtectionStatus, 00226 LIBMTP_PROPERTY_ObjectSize, 00227 LIBMTP_PROPERTY_AssociationType, 00228 LIBMTP_PROPERTY_AssociationDesc, 00229 LIBMTP_PROPERTY_ObjectFileName, 00230 LIBMTP_PROPERTY_DateCreated, 00231 LIBMTP_PROPERTY_DateModified, 00232 LIBMTP_PROPERTY_Keywords, 00233 LIBMTP_PROPERTY_ParentObject, 00234 LIBMTP_PROPERTY_AllowedFolderContents, 00235 LIBMTP_PROPERTY_Hidden, 00236 LIBMTP_PROPERTY_SystemObject, 00237 LIBMTP_PROPERTY_PersistantUniqueObjectIdentifier, 00238 LIBMTP_PROPERTY_SyncID, 00239 LIBMTP_PROPERTY_PropertyBag, 00240 LIBMTP_PROPERTY_Name, 00241 LIBMTP_PROPERTY_CreatedBy, 00242 LIBMTP_PROPERTY_Artist, 00243 LIBMTP_PROPERTY_DateAuthored, 00244 LIBMTP_PROPERTY_Description, 00245 LIBMTP_PROPERTY_URLReference, 00246 LIBMTP_PROPERTY_LanguageLocale, 00247 LIBMTP_PROPERTY_CopyrightInformation, 00248 LIBMTP_PROPERTY_Source, 00249 LIBMTP_PROPERTY_OriginLocation, 00250 LIBMTP_PROPERTY_DateAdded, 00251 LIBMTP_PROPERTY_NonConsumable, 00252 LIBMTP_PROPERTY_CorruptOrUnplayable, 00253 LIBMTP_PROPERTY_ProducerSerialNumber, 00254 LIBMTP_PROPERTY_RepresentativeSampleFormat, 00255 LIBMTP_PROPERTY_RepresentativeSampleSize, 00256 LIBMTP_PROPERTY_RepresentativeSampleHeight, 00257 LIBMTP_PROPERTY_RepresentativeSampleWidth, 00258 LIBMTP_PROPERTY_RepresentativeSampleDuration, 00259 LIBMTP_PROPERTY_RepresentativeSampleData, 00260 LIBMTP_PROPERTY_Width, 00261 LIBMTP_PROPERTY_Height, 00262 LIBMTP_PROPERTY_Duration, 00263 LIBMTP_PROPERTY_Rating, 00264 LIBMTP_PROPERTY_Track, 00265 LIBMTP_PROPERTY_Genre, 00266 LIBMTP_PROPERTY_Credits, 00267 LIBMTP_PROPERTY_Lyrics, 00268 LIBMTP_PROPERTY_SubscriptionContentID, 00269 LIBMTP_PROPERTY_ProducedBy, 00270 LIBMTP_PROPERTY_UseCount, 00271 LIBMTP_PROPERTY_SkipCount, 00272 LIBMTP_PROPERTY_LastAccessed, 00273 LIBMTP_PROPERTY_ParentalRating, 00274 LIBMTP_PROPERTY_MetaGenre, 00275 LIBMTP_PROPERTY_Composer, 00276 LIBMTP_PROPERTY_EffectiveRating, 00277 LIBMTP_PROPERTY_Subtitle, 00278 LIBMTP_PROPERTY_OriginalReleaseDate, 00279 LIBMTP_PROPERTY_AlbumName, 00280 LIBMTP_PROPERTY_AlbumArtist, 00281 LIBMTP_PROPERTY_Mood, 00282 LIBMTP_PROPERTY_DRMStatus, 00283 LIBMTP_PROPERTY_SubDescription, 00284 LIBMTP_PROPERTY_IsCropped, 00285 LIBMTP_PROPERTY_IsColorCorrected, 00286 LIBMTP_PROPERTY_ImageBitDepth, 00287 LIBMTP_PROPERTY_Fnumber, 00288 LIBMTP_PROPERTY_ExposureTime, 00289 LIBMTP_PROPERTY_ExposureIndex, 00290 LIBMTP_PROPERTY_DisplayName, 00291 LIBMTP_PROPERTY_BodyText, 00292 LIBMTP_PROPERTY_Subject, 00293 LIBMTP_PROPERTY_Priority, 00294 LIBMTP_PROPERTY_GivenName, 00295 LIBMTP_PROPERTY_MiddleNames, 00296 LIBMTP_PROPERTY_FamilyName, 00297 LIBMTP_PROPERTY_Prefix, 00298 LIBMTP_PROPERTY_Suffix, 00299 LIBMTP_PROPERTY_PhoneticGivenName, 00300 LIBMTP_PROPERTY_PhoneticFamilyName, 00301 LIBMTP_PROPERTY_EmailPrimary, 00302 LIBMTP_PROPERTY_EmailPersonal1, 00303 LIBMTP_PROPERTY_EmailPersonal2, 00304 LIBMTP_PROPERTY_EmailBusiness1, 00305 LIBMTP_PROPERTY_EmailBusiness2, 00306 LIBMTP_PROPERTY_EmailOthers, 00307 LIBMTP_PROPERTY_PhoneNumberPrimary, 00308 LIBMTP_PROPERTY_PhoneNumberPersonal, 00309 LIBMTP_PROPERTY_PhoneNumberPersonal2, 00310 LIBMTP_PROPERTY_PhoneNumberBusiness, 00311 LIBMTP_PROPERTY_PhoneNumberBusiness2, 00312 LIBMTP_PROPERTY_PhoneNumberMobile, 00313 LIBMTP_PROPERTY_PhoneNumberMobile2, 00314 LIBMTP_PROPERTY_FaxNumberPrimary, 00315 LIBMTP_PROPERTY_FaxNumberPersonal, 00316 LIBMTP_PROPERTY_FaxNumberBusiness, 00317 LIBMTP_PROPERTY_PagerNumber, 00318 LIBMTP_PROPERTY_PhoneNumberOthers, 00319 LIBMTP_PROPERTY_PrimaryWebAddress, 00320 LIBMTP_PROPERTY_PersonalWebAddress, 00321 LIBMTP_PROPERTY_BusinessWebAddress, 00322 LIBMTP_PROPERTY_InstantMessengerAddress, 00323 LIBMTP_PROPERTY_InstantMessengerAddress2, 00324 LIBMTP_PROPERTY_InstantMessengerAddress3, 00325 LIBMTP_PROPERTY_PostalAddressPersonalFull, 00326 LIBMTP_PROPERTY_PostalAddressPersonalFullLine1, 00327 LIBMTP_PROPERTY_PostalAddressPersonalFullLine2, 00328 LIBMTP_PROPERTY_PostalAddressPersonalFullCity, 00329 LIBMTP_PROPERTY_PostalAddressPersonalFullRegion, 00330 LIBMTP_PROPERTY_PostalAddressPersonalFullPostalCode, 00331 LIBMTP_PROPERTY_PostalAddressPersonalFullCountry, 00332 LIBMTP_PROPERTY_PostalAddressBusinessFull, 00333 LIBMTP_PROPERTY_PostalAddressBusinessLine1, 00334 LIBMTP_PROPERTY_PostalAddressBusinessLine2, 00335 LIBMTP_PROPERTY_PostalAddressBusinessCity, 00336 LIBMTP_PROPERTY_PostalAddressBusinessRegion, 00337 LIBMTP_PROPERTY_PostalAddressBusinessPostalCode, 00338 LIBMTP_PROPERTY_PostalAddressBusinessCountry, 00339 LIBMTP_PROPERTY_PostalAddressOtherFull, 00340 LIBMTP_PROPERTY_PostalAddressOtherLine1, 00341 LIBMTP_PROPERTY_PostalAddressOtherLine2, 00342 LIBMTP_PROPERTY_PostalAddressOtherCity, 00343 LIBMTP_PROPERTY_PostalAddressOtherRegion, 00344 LIBMTP_PROPERTY_PostalAddressOtherPostalCode, 00345 LIBMTP_PROPERTY_PostalAddressOtherCountry, 00346 LIBMTP_PROPERTY_OrganizationName, 00347 LIBMTP_PROPERTY_PhoneticOrganizationName, 00348 LIBMTP_PROPERTY_Role, 00349 LIBMTP_PROPERTY_Birthdate, 00350 LIBMTP_PROPERTY_MessageTo, 00351 LIBMTP_PROPERTY_MessageCC, 00352 LIBMTP_PROPERTY_MessageBCC, 00353 LIBMTP_PROPERTY_MessageRead, 00354 LIBMTP_PROPERTY_MessageReceivedTime, 00355 LIBMTP_PROPERTY_MessageSender, 00356 LIBMTP_PROPERTY_ActivityBeginTime, 00357 LIBMTP_PROPERTY_ActivityEndTime, 00358 LIBMTP_PROPERTY_ActivityLocation, 00359 LIBMTP_PROPERTY_ActivityRequiredAttendees, 00360 LIBMTP_PROPERTY_ActivityOptionalAttendees, 00361 LIBMTP_PROPERTY_ActivityResources, 00362 LIBMTP_PROPERTY_ActivityAccepted, 00363 LIBMTP_PROPERTY_Owner, 00364 LIBMTP_PROPERTY_Editor, 00365 LIBMTP_PROPERTY_Webmaster, 00366 LIBMTP_PROPERTY_URLSource, 00367 LIBMTP_PROPERTY_URLDestination, 00368 LIBMTP_PROPERTY_TimeBookmark, 00369 LIBMTP_PROPERTY_ObjectBookmark, 00370 LIBMTP_PROPERTY_ByteBookmark, 00371 LIBMTP_PROPERTY_LastBuildDate, 00372 LIBMTP_PROPERTY_TimetoLive, 00373 LIBMTP_PROPERTY_MediaGUID, 00374 LIBMTP_PROPERTY_TotalBitRate, 00375 LIBMTP_PROPERTY_BitRateType, 00376 LIBMTP_PROPERTY_SampleRate, 00377 LIBMTP_PROPERTY_NumberOfChannels, 00378 LIBMTP_PROPERTY_AudioBitDepth, 00379 LIBMTP_PROPERTY_ScanDepth, 00380 LIBMTP_PROPERTY_AudioWAVECodec, 00381 LIBMTP_PROPERTY_AudioBitRate, 00382 LIBMTP_PROPERTY_VideoFourCCCodec, 00383 LIBMTP_PROPERTY_VideoBitRate, 00384 LIBMTP_PROPERTY_FramesPerThousandSeconds, 00385 LIBMTP_PROPERTY_KeyFrameDistance, 00386 LIBMTP_PROPERTY_BufferSize, 00387 LIBMTP_PROPERTY_EncodingQuality, 00388 LIBMTP_PROPERTY_EncodingProfile, 00389 LIBMTP_PROPERTY_BuyFlag, 00390 LIBMTP_PROPERTY_UNKNOWN 00391 } LIBMTP_property_t; 00392 00396 typedef enum { 00397 LIBMTP_DATATYPE_INT8, 00398 LIBMTP_DATATYPE_UINT8, 00399 LIBMTP_DATATYPE_INT16, 00400 LIBMTP_DATATYPE_UINT16, 00401 LIBMTP_DATATYPE_INT32, 00402 LIBMTP_DATATYPE_UINT32, 00403 LIBMTP_DATATYPE_INT64, 00404 LIBMTP_DATATYPE_UINT64, 00405 } LIBMTP_datatype_t; 00406 00410 typedef enum { 00415 LIBMTP_DEVICECAP_GetPartialObject, 00420 LIBMTP_DEVICECAP_SendPartialObject, 00428 LIBMTP_DEVICECAP_EditObjects, 00429 } LIBMTP_devicecap_t; 00430 00435 typedef enum { 00436 LIBMTP_ERROR_NONE, 00437 LIBMTP_ERROR_GENERAL, 00438 LIBMTP_ERROR_PTP_LAYER, 00439 LIBMTP_ERROR_USB_LAYER, 00440 LIBMTP_ERROR_MEMORY_ALLOCATION, 00441 LIBMTP_ERROR_NO_DEVICE_ATTACHED, 00442 LIBMTP_ERROR_STORAGE_FULL, 00443 LIBMTP_ERROR_CONNECTING, 00444 LIBMTP_ERROR_CANCELLED 00445 } LIBMTP_error_number_t; 00446 00447 typedef struct LIBMTP_device_entry_struct LIBMTP_device_entry_t; 00448 typedef struct LIBMTP_raw_device_struct LIBMTP_raw_device_t; 00449 typedef struct LIBMTP_error_struct LIBMTP_error_t; 00450 typedef struct LIBMTP_allowed_values_struct LIBMTP_allowed_values_t; 00451 typedef struct LIBMTP_device_extension_struct LIBMTP_device_extension_t; 00452 typedef struct LIBMTP_mtpdevice_struct LIBMTP_mtpdevice_t; 00453 typedef struct LIBMTP_file_struct LIBMTP_file_t; 00454 typedef struct LIBMTP_track_struct LIBMTP_track_t; 00455 typedef struct LIBMTP_playlist_struct LIBMTP_playlist_t; 00456 typedef struct LIBMTP_album_struct LIBMTP_album_t; 00457 typedef struct LIBMTP_folder_struct LIBMTP_folder_t; 00458 typedef struct LIBMTP_object_struct LIBMTP_object_t; 00459 typedef struct LIBMTP_filesampledata_struct LIBMTP_filesampledata_t; 00460 typedef struct LIBMTP_devicestorage_struct LIBMTP_devicestorage_t; 00472 typedef int (* LIBMTP_progressfunc_t) (uint64_t const sent, uint64_t const total, 00473 void const * const data); 00474 00487 typedef uint16_t (* MTPDataGetFunc) (void* params, void* priv, 00488 uint32_t wantlen, unsigned char *data, uint32_t *gotlen); 00489 00502 typedef uint16_t (* MTPDataPutFunc) (void* params, void* priv, 00503 uint32_t sendlen, unsigned char *data, uint32_t *putlen); 00504 00508 #define LIBMTP_HANDLER_RETURN_OK 0 00509 #define LIBMTP_HANDLER_RETURN_ERROR 1 00510 #define LIBMTP_HANDLER_RETURN_CANCEL 2 00511 00521 struct LIBMTP_device_entry_struct { 00522 char *vendor; 00523 uint16_t vendor_id; 00524 char *product; 00525 uint16_t product_id; 00526 uint32_t device_flags; 00527 }; 00528 00533 struct LIBMTP_raw_device_struct { 00534 LIBMTP_device_entry_t device_entry; 00535 uint32_t bus_location; 00536 uint8_t devnum; 00537 }; 00538 00542 struct LIBMTP_error_struct { 00543 LIBMTP_error_number_t errornumber; 00544 char *error_text; 00545 LIBMTP_error_t *next; 00546 }; 00547 00551 struct LIBMTP_allowed_values_struct { 00552 uint8_t u8max; 00553 uint8_t u8min; 00554 uint8_t u8step; 00555 uint8_t* u8vals; 00556 int8_t i8max; 00557 int8_t i8min; 00558 int8_t i8step; 00559 int8_t* i8vals; 00560 uint16_t u16max; 00561 uint16_t u16min; 00562 uint16_t u16step; 00563 uint16_t* u16vals; 00564 int16_t i16max; 00565 int16_t i16min; 00566 int16_t i16step; 00567 int16_t* i16vals; 00568 uint32_t u32max; 00569 uint32_t u32min; 00570 uint32_t u32step; 00571 uint32_t* u32vals; 00572 int32_t i32max; 00573 int32_t i32min; 00574 int32_t i32step; 00575 int32_t* i32vals; 00576 uint64_t u64max; 00577 uint64_t u64min; 00578 uint64_t u64step; 00579 uint64_t* u64vals; 00580 int64_t i64max; 00581 int64_t i64min; 00582 int64_t i64step; 00583 int64_t* i64vals; 00587 uint16_t num_entries; 00591 LIBMTP_datatype_t datatype; 00595 int is_range; 00596 }; 00597 00601 struct LIBMTP_device_extension_struct { 00605 char *name; 00609 int major; 00613 int minor; 00618 LIBMTP_device_extension_t *next; 00619 }; 00620 00624 struct LIBMTP_mtpdevice_struct { 00628 uint8_t object_bitsize; 00633 void *params; 00638 void *usbinfo; 00645 LIBMTP_devicestorage_t *storage; 00650 LIBMTP_error_t *errorstack; 00652 uint8_t maximum_battery_level; 00654 uint32_t default_music_folder; 00656 uint32_t default_playlist_folder; 00658 uint32_t default_picture_folder; 00660 uint32_t default_video_folder; 00662 uint32_t default_organizer_folder; 00664 uint32_t default_zencast_folder; 00666 uint32_t default_album_folder; 00668 uint32_t default_text_folder; 00670 void *cd; 00672 LIBMTP_device_extension_t *extensions; 00674 int cached; 00675 00677 LIBMTP_mtpdevice_t *next; 00678 }; 00679 00683 struct LIBMTP_file_struct { 00684 uint32_t item_id; 00685 uint32_t parent_id; 00686 uint32_t storage_id; 00687 char *filename; 00688 uint64_t filesize; 00689 time_t modificationdate; 00690 LIBMTP_filetype_t filetype; 00691 LIBMTP_file_t *next; 00692 }; 00693 00697 struct LIBMTP_track_struct { 00698 uint32_t item_id; 00699 uint32_t parent_id; 00700 uint32_t storage_id; 00701 char *title; 00702 char *artist; 00703 char *composer; 00704 char *genre; 00705 char *album; 00706 char *date; 00707 char *filename; 00708 uint16_t tracknumber; 00709 uint32_t duration; 00710 uint32_t samplerate; 00711 uint16_t nochannels; 00712 uint32_t wavecodec; 00713 uint32_t bitrate; 00714 uint16_t bitratetype; 00715 uint16_t rating; 00716 uint32_t usecount; 00717 uint64_t filesize; 00718 time_t modificationdate; 00719 LIBMTP_filetype_t filetype; 00720 LIBMTP_track_t *next; 00721 }; 00722 00726 struct LIBMTP_playlist_struct { 00727 uint32_t playlist_id; 00728 uint32_t parent_id; 00729 uint32_t storage_id; 00730 char *name; 00731 uint32_t *tracks; 00732 uint32_t no_tracks; 00733 LIBMTP_playlist_t *next; 00734 }; 00735 00739 struct LIBMTP_album_struct { 00740 uint32_t album_id; 00741 uint32_t parent_id; 00742 uint32_t storage_id; 00743 char *name; 00744 char *artist; 00745 char *composer; 00746 char *genre; 00747 uint32_t *tracks; 00748 uint32_t no_tracks; 00749 LIBMTP_album_t *next; 00750 }; 00751 00755 struct LIBMTP_folder_struct { 00756 uint32_t folder_id; 00757 uint32_t parent_id; 00758 uint32_t storage_id; 00759 char *name; 00760 LIBMTP_folder_t *sibling; 00761 LIBMTP_folder_t *child; 00762 }; 00763 00767 struct LIBMTP_filesampledata_struct { 00768 uint32_t width; 00769 uint32_t height; 00770 uint32_t duration; 00771 LIBMTP_filetype_t filetype; 00772 uint64_t size; 00773 char *data; 00774 }; 00775 00779 struct LIBMTP_devicestorage_struct { 00780 uint32_t id; 00781 uint16_t StorageType; 00782 uint16_t FilesystemType; 00783 uint16_t AccessCapability; 00784 uint64_t MaxCapacity; 00785 uint64_t FreeSpaceInBytes; 00786 uint64_t FreeSpaceInObjects; 00787 char *StorageDescription; 00788 char *VolumeIdentifier; 00789 LIBMTP_devicestorage_t *next; 00790 LIBMTP_devicestorage_t *prev; 00791 }; 00792 00797 enum LIBMTP_event_enum { 00798 LIBMTP_EVENT_NONE, 00799 LIBMTP_EVENT_STORE_ADDED, 00800 LIBMTP_EVENT_STORE_REMOVED, 00801 LIBMTP_EVENT_OBJECT_ADDED, 00802 LIBMTP_EVENT_OBJECT_REMOVED, 00803 }; 00804 typedef enum LIBMTP_event_enum LIBMTP_event_t; 00805 00808 /* Make functions available for C++ */ 00809 #ifdef __cplusplus 00810 extern "C" { 00811 #endif 00812 00813 extern int LIBMTP_debug; 00814 00819 void LIBMTP_Set_Debug(int); 00820 void LIBMTP_Init(void); 00821 int LIBMTP_Get_Supported_Devices_List(LIBMTP_device_entry_t ** const, int * const); 00827 LIBMTP_error_number_t LIBMTP_Detect_Raw_Devices(LIBMTP_raw_device_t **, int *); 00828 int LIBMTP_Check_Specific_Device(int busno, int devno); 00829 LIBMTP_mtpdevice_t *LIBMTP_Open_Raw_Device(LIBMTP_raw_device_t *); 00830 LIBMTP_mtpdevice_t *LIBMTP_Open_Raw_Device_Uncached(LIBMTP_raw_device_t *); 00831 /* Begin old, legacy interface */ 00832 LIBMTP_mtpdevice_t *LIBMTP_Get_First_Device(void); 00833 LIBMTP_error_number_t LIBMTP_Get_Connected_Devices(LIBMTP_mtpdevice_t **); 00834 uint32_t LIBMTP_Number_Devices_In_List(LIBMTP_mtpdevice_t *); 00835 void LIBMTP_Release_Device_List(LIBMTP_mtpdevice_t*); 00836 /* End old, legacy interface */ 00837 void LIBMTP_Release_Device(LIBMTP_mtpdevice_t*); 00838 void LIBMTP_Dump_Device_Info(LIBMTP_mtpdevice_t*); 00839 int LIBMTP_Reset_Device(LIBMTP_mtpdevice_t*); 00840 char *LIBMTP_Get_Manufacturername(LIBMTP_mtpdevice_t*); 00841 char *LIBMTP_Get_Modelname(LIBMTP_mtpdevice_t*); 00842 char *LIBMTP_Get_Serialnumber(LIBMTP_mtpdevice_t*); 00843 char *LIBMTP_Get_Deviceversion(LIBMTP_mtpdevice_t*); 00844 char *LIBMTP_Get_Friendlyname(LIBMTP_mtpdevice_t*); 00845 int LIBMTP_Set_Friendlyname(LIBMTP_mtpdevice_t*, char const * const); 00846 char *LIBMTP_Get_Syncpartner(LIBMTP_mtpdevice_t*); 00847 int LIBMTP_Set_Syncpartner(LIBMTP_mtpdevice_t*, char const * const); 00848 int LIBMTP_Get_Batterylevel(LIBMTP_mtpdevice_t *, 00849 uint8_t * const, 00850 uint8_t * const); 00851 int LIBMTP_Get_Secure_Time(LIBMTP_mtpdevice_t *, char ** const); 00852 int LIBMTP_Get_Device_Certificate(LIBMTP_mtpdevice_t *, char ** const); 00853 int LIBMTP_Get_Supported_Filetypes(LIBMTP_mtpdevice_t *, uint16_t ** const, uint16_t * const); 00854 int LIBMTP_Check_Capability(LIBMTP_mtpdevice_t *, LIBMTP_devicecap_t); 00855 LIBMTP_error_t *LIBMTP_Get_Errorstack(LIBMTP_mtpdevice_t*); 00856 void LIBMTP_Clear_Errorstack(LIBMTP_mtpdevice_t*); 00857 void LIBMTP_Dump_Errorstack(LIBMTP_mtpdevice_t*); 00858 00859 #define LIBMTP_STORAGE_SORTBY_NOTSORTED 0 00860 #define LIBMTP_STORAGE_SORTBY_FREESPACE 1 00861 #define LIBMTP_STORAGE_SORTBY_MAXSPACE 2 00862 00863 int LIBMTP_Get_Storage(LIBMTP_mtpdevice_t *, int const); 00864 int LIBMTP_Format_Storage(LIBMTP_mtpdevice_t *, LIBMTP_devicestorage_t *); 00865 00870 char *LIBMTP_Get_String_From_Object(LIBMTP_mtpdevice_t *, uint32_t const, LIBMTP_property_t const); 00871 uint64_t LIBMTP_Get_u64_From_Object(LIBMTP_mtpdevice_t *, uint32_t const, 00872 LIBMTP_property_t const, uint64_t const); 00873 uint32_t LIBMTP_Get_u32_From_Object(LIBMTP_mtpdevice_t *, uint32_t const, 00874 LIBMTP_property_t const, uint32_t const); 00875 uint16_t LIBMTP_Get_u16_From_Object(LIBMTP_mtpdevice_t *, uint32_t const, 00876 LIBMTP_property_t const, uint16_t const); 00877 uint8_t LIBMTP_Get_u8_From_Object(LIBMTP_mtpdevice_t *, uint32_t const, 00878 LIBMTP_property_t const, uint8_t const); 00879 int LIBMTP_Set_Object_String(LIBMTP_mtpdevice_t *, uint32_t const, 00880 LIBMTP_property_t const, char const * const); 00881 int LIBMTP_Set_Object_u32(LIBMTP_mtpdevice_t *, uint32_t const, 00882 LIBMTP_property_t const, uint32_t const); 00883 int LIBMTP_Set_Object_u16(LIBMTP_mtpdevice_t *, uint32_t const, 00884 LIBMTP_property_t const, uint16_t const); 00885 int LIBMTP_Set_Object_u8(LIBMTP_mtpdevice_t *, uint32_t const, 00886 LIBMTP_property_t const, uint8_t const); 00887 char const * LIBMTP_Get_Property_Description(LIBMTP_property_t inproperty); 00888 int LIBMTP_Is_Property_Supported(LIBMTP_mtpdevice_t*, LIBMTP_property_t const, 00889 LIBMTP_filetype_t const); 00890 int LIBMTP_Get_Allowed_Property_Values(LIBMTP_mtpdevice_t*, LIBMTP_property_t const, 00891 LIBMTP_filetype_t const, LIBMTP_allowed_values_t*); 00892 void LIBMTP_destroy_allowed_values_t(LIBMTP_allowed_values_t*); 00893 00899 LIBMTP_file_t *LIBMTP_new_file_t(void); 00900 void LIBMTP_destroy_file_t(LIBMTP_file_t*); 00901 char const * LIBMTP_Get_Filetype_Description(LIBMTP_filetype_t); 00902 LIBMTP_file_t *LIBMTP_Get_Filelisting(LIBMTP_mtpdevice_t *); 00903 LIBMTP_file_t *LIBMTP_Get_Filelisting_With_Callback(LIBMTP_mtpdevice_t *, 00904 LIBMTP_progressfunc_t const, void const * const); 00905 LIBMTP_file_t * LIBMTP_Get_Files_And_Folders(LIBMTP_mtpdevice_t *, 00906 uint32_t const, 00907 uint32_t const); 00908 LIBMTP_file_t *LIBMTP_Get_Filemetadata(LIBMTP_mtpdevice_t *, uint32_t const); 00909 int LIBMTP_Get_File_To_File(LIBMTP_mtpdevice_t*, uint32_t, char const * const, 00910 LIBMTP_progressfunc_t const, void const * const); 00911 int LIBMTP_Get_File_To_File_Descriptor(LIBMTP_mtpdevice_t*, 00912 uint32_t const, 00913 int const, 00914 LIBMTP_progressfunc_t const, 00915 void const * const); 00916 int LIBMTP_Get_File_To_Handler(LIBMTP_mtpdevice_t *, 00917 uint32_t const, 00918 MTPDataPutFunc, 00919 void *, 00920 LIBMTP_progressfunc_t const, 00921 void const * const); 00922 int LIBMTP_Send_File_From_File(LIBMTP_mtpdevice_t *, 00923 char const * const, 00924 LIBMTP_file_t * const, 00925 LIBMTP_progressfunc_t const, 00926 void const * const); 00927 int LIBMTP_Send_File_From_File_Descriptor(LIBMTP_mtpdevice_t *, 00928 int const, 00929 LIBMTP_file_t * const, 00930 LIBMTP_progressfunc_t const, 00931 void const * const); 00932 int LIBMTP_Send_File_From_Handler(LIBMTP_mtpdevice_t *, 00933 MTPDataGetFunc, void *, 00934 LIBMTP_file_t * const, 00935 LIBMTP_progressfunc_t const, 00936 void const * const); 00937 int LIBMTP_Set_File_Name(LIBMTP_mtpdevice_t *, 00938 LIBMTP_file_t *, 00939 const char *); 00940 LIBMTP_filesampledata_t *LIBMTP_new_filesampledata_t(void); 00941 void LIBMTP_destroy_filesampledata_t(LIBMTP_filesampledata_t *); 00942 int LIBMTP_Get_Representative_Sample_Format(LIBMTP_mtpdevice_t *, 00943 LIBMTP_filetype_t const, 00944 LIBMTP_filesampledata_t **); 00945 int LIBMTP_Send_Representative_Sample(LIBMTP_mtpdevice_t *, uint32_t const, 00946 LIBMTP_filesampledata_t *); 00947 int LIBMTP_Get_Representative_Sample(LIBMTP_mtpdevice_t *, uint32_t const, 00948 LIBMTP_filesampledata_t *); 00949 int LIBMTP_Get_Thumbnail(LIBMTP_mtpdevice_t *, uint32_t const, 00950 unsigned char **data, unsigned int *size); 00951 00957 LIBMTP_track_t *LIBMTP_new_track_t(void); 00958 void LIBMTP_destroy_track_t(LIBMTP_track_t*); 00959 LIBMTP_track_t *LIBMTP_Get_Tracklisting(LIBMTP_mtpdevice_t*); 00960 LIBMTP_track_t *LIBMTP_Get_Tracklisting_With_Callback(LIBMTP_mtpdevice_t*, 00961 LIBMTP_progressfunc_t const, void const * const); 00962 LIBMTP_track_t *LIBMTP_Get_Tracklisting_With_Callback_For_Storage(LIBMTP_mtpdevice_t*, uint32_t const, 00963 LIBMTP_progressfunc_t const, void const * const); 00964 LIBMTP_track_t *LIBMTP_Get_Trackmetadata(LIBMTP_mtpdevice_t*, uint32_t const); 00965 int LIBMTP_Get_Track_To_File(LIBMTP_mtpdevice_t*, uint32_t, char const * const, 00966 LIBMTP_progressfunc_t const, void const * const); 00967 int LIBMTP_Get_Track_To_File_Descriptor(LIBMTP_mtpdevice_t*, uint32_t const, int const, 00968 LIBMTP_progressfunc_t const, void const * const); 00969 int LIBMTP_Get_Track_To_Handler(LIBMTP_mtpdevice_t *, uint32_t const, MTPDataPutFunc, 00970 void *, LIBMTP_progressfunc_t const, void const * const); 00971 int LIBMTP_Send_Track_From_File(LIBMTP_mtpdevice_t *, 00972 char const * const, LIBMTP_track_t * const, 00973 LIBMTP_progressfunc_t const, 00974 void const * const); 00975 int LIBMTP_Send_Track_From_File_Descriptor(LIBMTP_mtpdevice_t *, 00976 int const, LIBMTP_track_t * const, 00977 LIBMTP_progressfunc_t const, 00978 void const * const); 00979 int LIBMTP_Send_Track_From_Handler(LIBMTP_mtpdevice_t *, 00980 MTPDataGetFunc, void *, LIBMTP_track_t * const, 00981 LIBMTP_progressfunc_t const, 00982 void const * const); 00983 int LIBMTP_Update_Track_Metadata(LIBMTP_mtpdevice_t *, 00984 LIBMTP_track_t const * const); 00985 int LIBMTP_Track_Exists(LIBMTP_mtpdevice_t *, uint32_t const); 00986 int LIBMTP_Set_Track_Name(LIBMTP_mtpdevice_t *, LIBMTP_track_t *, const char *); 00994 LIBMTP_folder_t *LIBMTP_new_folder_t(void); 00995 void LIBMTP_destroy_folder_t(LIBMTP_folder_t*); 00996 LIBMTP_folder_t *LIBMTP_Get_Folder_List(LIBMTP_mtpdevice_t*); 00997 LIBMTP_folder_t *LIBMTP_Get_Folder_List_For_Storage(LIBMTP_mtpdevice_t*, 00998 uint32_t const); 00999 LIBMTP_folder_t *LIBMTP_Find_Folder(LIBMTP_folder_t*, uint32_t const); 01000 uint32_t LIBMTP_Create_Folder(LIBMTP_mtpdevice_t*, char *, uint32_t, uint32_t); 01001 int LIBMTP_Set_Folder_Name(LIBMTP_mtpdevice_t *, LIBMTP_folder_t *, const char *); 01010 LIBMTP_playlist_t *LIBMTP_new_playlist_t(void); 01011 void LIBMTP_destroy_playlist_t(LIBMTP_playlist_t *); 01012 LIBMTP_playlist_t *LIBMTP_Get_Playlist_List(LIBMTP_mtpdevice_t *); 01013 LIBMTP_playlist_t *LIBMTP_Get_Playlist(LIBMTP_mtpdevice_t *, uint32_t const); 01014 int LIBMTP_Create_New_Playlist(LIBMTP_mtpdevice_t *, LIBMTP_playlist_t * const); 01015 int LIBMTP_Update_Playlist(LIBMTP_mtpdevice_t *, LIBMTP_playlist_t * const); 01016 int LIBMTP_Set_Playlist_Name(LIBMTP_mtpdevice_t *, LIBMTP_playlist_t *, const char *); 01017 01023 LIBMTP_album_t *LIBMTP_new_album_t(void); 01024 void LIBMTP_destroy_album_t(LIBMTP_album_t *); 01025 LIBMTP_album_t *LIBMTP_Get_Album_List(LIBMTP_mtpdevice_t *); 01026 LIBMTP_album_t *LIBMTP_Get_Album_List_For_Storage(LIBMTP_mtpdevice_t *, uint32_t const); 01027 LIBMTP_album_t *LIBMTP_Get_Album(LIBMTP_mtpdevice_t *, uint32_t const); 01028 int LIBMTP_Create_New_Album(LIBMTP_mtpdevice_t *, LIBMTP_album_t * const); 01029 int LIBMTP_Update_Album(LIBMTP_mtpdevice_t *, LIBMTP_album_t const * const); 01030 int LIBMTP_Set_Album_Name(LIBMTP_mtpdevice_t *, LIBMTP_album_t *, const char *); 01031 01037 int LIBMTP_Delete_Object(LIBMTP_mtpdevice_t *, uint32_t); 01038 int LIBMTP_Set_Object_Filename(LIBMTP_mtpdevice_t *, uint32_t , char *); 01039 int LIBMTP_GetPartialObject(LIBMTP_mtpdevice_t *, uint32_t const, 01040 uint64_t, uint32_t, 01041 unsigned char **, unsigned int *); 01042 int LIBMTP_SendPartialObject(LIBMTP_mtpdevice_t *, uint32_t const, 01043 uint64_t, unsigned char *, unsigned int); 01044 int LIBMTP_BeginEditObject(LIBMTP_mtpdevice_t *, uint32_t const); 01045 int LIBMTP_EndEditObject(LIBMTP_mtpdevice_t *, uint32_t const); 01046 int LIBMTP_TruncateObject(LIBMTP_mtpdevice_t *, uint32_t const, uint64_t); 01047 01053 typedef void(* LIBMTP_event_cb_fn) (int, LIBMTP_event_t, uint32_t, void *); 01054 int LIBMTP_Read_Event(LIBMTP_mtpdevice_t *, LIBMTP_event_t *, uint32_t *); 01055 int LIBMTP_Read_Event_Async(LIBMTP_mtpdevice_t *, LIBMTP_event_cb_fn, void *); 01056 int LIBMTP_Handle_Events_Timeout_Completed(struct timeval *, int *); 01057 01060 /* End of C++ exports */ 01061 #ifdef __cplusplus 01062 } 01063 #endif 01064 01065 #endif /* LIBMTP_H_INCLUSION_GUARD */ 01066