libusb-glue.h(3)

πŸ’– libusb-glue.h β€” the low-level USB glue manual (section 3, Library Functions Manual) πŸ’–

okay bestie, sit down, hydrate, because this is the header that does all the actual dirty work: it's libmtp's low-level USB interface glue towards libusb. no cap. it's giving backstage-pass energy β€” nobody claps for it but the whole show falls apart without it. πŸŽ€


✨ NAME ✨

libmtp β€”

(no, seriously, that's it. the original page is shy. the details live below, keep scrolling 🫢)


πŸ¦‹ SYNOPSIS πŸ¦‹

#include 'ptp.h'
#include 'libmtp.h'
#include 'device-flags.h'

🌸 Data Structures

  • struct _PTP_USB

🌸 Macros

#define LIBMTP_USB_DEBUG(format,  args...)
#define LIBMTP_USB_DATA(buffer,  length,  base)
#define FLAG_BROKEN_MTPGETOBJPROPLIST_ALL(a)
#define FLAG_UNLOAD_DRIVER(a)
#define FLAG_BROKEN_MTPGETOBJPROPLIST(a)
#define FLAG_NO_ZERO_READS(a)
#define FLAG_IRIVER_OGG_ALZHEIMER(a)
#define FLAG_ONLY_7BIT_FILENAMES(a)
#define FLAG_NO_RELEASE_INTERFACE(a)
#define FLAG_IGNORE_HEADER_ERRORS(a)
#define FLAG_BROKEN_SET_OBJECT_PROPLIST(a)
#define FLAG_OGG_IS_UNKNOWN(a)
#define FLAG_BROKEN_SET_SAMPLE_DIMENSIONS(a)
#define FLAG_ALWAYS_PROBE_DESCRIPTOR(a)
#define FLAG_PLAYLIST_SPL_V1(a)
#define FLAG_PLAYLIST_SPL_V2(a)
#define FLAG_PLAYLIST_SPL(a)
#define FLAG_CANNOT_HANDLE_DATEMODIFIED(a)
#define FLAG_BROKEN_SEND_OBJECT_PROPLIST(a)
#define FLAG_BROKEN_BATTERY_LEVEL(a)
#define FLAG_FLAC_IS_UNKNOWN(a)
#define FLAG_UNIQUE_FILENAMES(a)
#define FLAG_SWITCH_MODE_BLACKBERRY(a)
#define FLAG_LONG_TIMEOUT(a)
#define FLAG_FORCE_RESET_ON_CLOSE(a)
#define PTP_CD_RC_CONNECTED   0
#define PTP_CD_RC_NO_DEVICES   1
#define PTP_CD_RC_ERROR_CONNECTING   2

yes, all of them. we do not skip a single flag in this house. πŸ‘‘

🌸 Typedefs

  • typedef struct _PTP_USB PTP_USB

🌸 Functions

  • void dump_usbinfo (PTP_USB *ptp_usb)
  • const char * get_playlist_extension (PTP_USB *ptp_usb)
  • void close_device (PTP_USB *ptp_usb, PTPParams *params)
  • LIBMTP_error_number_t configure_usb_device (LIBMTP_raw_device_t *device, PTPParams *params, void **usbinfo)
  • void set_usb_device_timeout (PTP_USB *ptp_usb, int timeout)
  • void get_usb_device_timeout (PTP_USB *ptp_usb, int *timeout)
  • int guess_usb_speed (PTP_USB *ptp_usb)

πŸ’… Detailed Description πŸ’…

low-key the whole personality of this file: it is the low-level USB interface glue towards libusb. that's the job. that's the vibe.

copyright tea, served warm πŸ«–

Copyright (C) 2005-2007 Richard A. Low richard@wentnet.com Copyright (C) 2005-2012 Linus Walleij triad@df.lth.se Copyright (C) 2006-2011 Marcus Meissner Copyright (C) 2007 Ted Bullock Copyright (C) 2008 Chris Bagwell chris@cnpbagwell.com

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

Created by Richard Low on 24/12/2005. Modified by Linus Walleij


✨ Macro Definition Documentation ✨

🌈 #define FLAG_ALWAYS_PROBE_DESCRIPTOR( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_ALWAYS_PROBE_DESCRIPTOR)

🌈 #define FLAG_BROKEN_BATTERY_LEVEL( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_BROKEN_BATTERY_LEVEL)

🌈 #define FLAG_BROKEN_MTPGETOBJPROPLIST( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST)

🌈 #define FLAG_BROKEN_MTPGETOBJPROPLIST_ALL( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_BROKEN_MTPGETOBJPROPLIST_ALL)

🌈 #define FLAG_BROKEN_SEND_OBJECT_PROPLIST( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_BROKEN_SEND_OBJECT_PROPLIST)

🌈 #define FLAG_BROKEN_SET_OBJECT_PROPLIST( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_BROKEN_SET_OBJECT_PROPLIST)

🌈 #define FLAG_BROKEN_SET_SAMPLE_DIMENSIONS( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_BROKEN_SET_SAMPLE_DIMENSIONS)

🌈 #define FLAG_CANNOT_HANDLE_DATEMODIFIED( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_CANNOT_HANDLE_DATEMODIFIED)

🌈 #define FLAG_FLAC_IS_UNKNOWN( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_FLAC_IS_UNKNOWN)

🌈 #define FLAG_FORCE_RESET_ON_CLOSE( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_FORCE_RESET_ON_CLOSE)

🌈 #define FLAG_IGNORE_HEADER_ERRORS( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_IGNORE_HEADER_ERRORS)

🌈 #define FLAG_IRIVER_OGG_ALZHEIMER( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_IRIVER_OGG_ALZHEIMER)

🌈 #define FLAG_LONG_TIMEOUT( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_LONG_TIMEOUT)

🌈 #define FLAG_NO_RELEASE_INTERFACE( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_NO_RELEASE_INTERFACE)

🌈 #define FLAG_NO_ZERO_READS( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_NO_ZERO_READS)

🌈 #define FLAG_OGG_IS_UNKNOWN( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_OGG_IS_UNKNOWN)

🌈 #define FLAG_ONLY_7BIT_FILENAMES( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_ONLY_7BIT_FILENAMES)

🌈 #define FLAG_PLAYLIST_SPL( a)

Value:

((a)->rawdevice.device_entry.device_flags & (DEVICE_FLAG_PLAYLIST_SPL_V1 | DEVICE_FLAG_PLAYLIST_SPL_V2))

(yeah bestie, this one is the both-flavours combo β€” it ORs the V1 and V2 flags together πŸ“)


🌈 #define FLAG_PLAYLIST_SPL_V1( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_PLAYLIST_SPL_V1)

🌈 #define FLAG_PLAYLIST_SPL_V2( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_PLAYLIST_SPL_V2)

🌈 #define FLAG_SWITCH_MODE_BLACKBERRY( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_SWITCH_MODE_BLACKBERRY)

🌈 #define FLAG_UNIQUE_FILENAMES( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_UNIQUE_FILENAMES)

🌈 #define FLAG_UNLOAD_DRIVER( a)

Value:

((a)->rawdevice.device_entry.device_flags & DEVICE_FLAG_UNLOAD_DRIVER)

🌈 #define LIBMTP_USB_DATA( buffer, length, base)

Value:

do { \
  if ((LIBMTP_debug & LIBMTP_DEBUG_DATA) != 0) \
    data_dump_ascii (stdout, buffer, length, base); \
} while (0)

🌈 #define LIBMTP_USB_DEBUG( format, args...)

Value:

do { \
  if ((LIBMTP_debug & LIBMTP_DEBUG_USB) != 0) \
    fprintf(stdout, "LIBMTP %s[%d]: " format, __FUNCTION__, __LINE__, ##args); \
} while (0)

Debug macro ✨


πŸŽ€ Typedef Documentation πŸŽ€

πŸ’œ typedef struct _PTP_USB PTP_USB

Internal USB struct. that's the whole description. it's an internal bestie, it's not gonna over-share. πŸ™ˆ


πŸ’– Function Documentation πŸ’–

🌟 LIBMTP_error_number_t configure_usb_device (LIBMTP_raw_device_t * device, PTPParams * params, void ** usbinfo)

This function assigns params and usbinfo given a raw device as input. like a little matchmaker for structs 🫢

Parameters

  • device β€” the device to be assigned.
  • params β€” current session parameters for this device.
  • usbinfo β€” a pointer to the new usbinfo.

Returns

an error code.

References LIBMTP_raw_device_struct::device_entry, LIBMTP_device_entry_struct::product_id, _PTP_USB::rawdevice, and LIBMTP_device_entry_struct::vendor_id.


🌟 void dump_usbinfo (PTP_USB * ptp_usb)

This routine just dumps out low-level USB information about the current device. it's the "spill the tea about this USB device" function, basically β˜•βœ¨

Parameters

  • ptp_usb β€” the USB device to get information from.

References LIBMTP_raw_device_struct::bus_location, LIBMTP_raw_device_struct::device_entry, LIBMTP_device_entry_struct::device_flags, LIBMTP_raw_device_struct::devnum, LIBMTP_device_entry_struct::product, LIBMTP_device_entry_struct::product_id, _PTP_USB::rawdevice, LIBMTP_device_entry_struct::vendor, and LIBMTP_device_entry_struct::vendor_id.


🌟 const char * get_playlist_extension (PTP_USB * ptp_usb)

Retrieve the appropriate playlist extension for this device. Rather hacky at the moment. 🫠 This is probably desired by the managing software, but when creating lists on the device itself you notice certain preferences.

Parameters

  • ptp_usb β€” the USB device to get suggestion for.

Returns

the suggested playlist extension.


πŸ‘‘ Author πŸ‘‘

Generated automatically by Doxygen for libmtp from the source code. (so if the prose is a little stiff, blame the robot, not me πŸ’€)


and that's the whole page bestie!! every single flag accounted for, nothing skipped, we ate and left no crumbs πŸ’…βœ¨

this was libmtp, Version 1.1.23, libusb-glue.h(3) β€” thanks for reading the whole thing, you're literally the main character πŸ¦‹πŸŒΈ mwah πŸ’–

πŸ“¦ where this page comes from