summaryrefslogtreecommitdiffstats
path: root/src/usb.c
AgeCommit message (Collapse)AuthorFilesLines
2024-09-14usb: add support for modes 4 and 5Gravatar Foster Snowhill1-2/+12
* Mode 4 USB Ethernet + CDC-NCM iOS >= 16.0 * Mode 5 CDC-NCM Direct only (no usbmux, no USB Ethernet, no PTP) iOS >= 17.0
2024-09-14usb: correctly display 10 Gbps USB 3.xGravatar Foster Snowhill1-0/+3
iPhone 15 Pro/Pro Max support up to 10 Gbps USB 3.x. Add the necessary case to display the correct link speed. Requires libusb 1.0.22 (2018-03-25) or newer, introduced in libusb/libusb@7a91d7cdccaa7dfc3db0828a5230d6260e9338d7
2024-07-19usb: Revert default mode back to 1Gravatar Georgi Valkov1-1/+1
[1] changes to mode 3 CDC NCM by default. Revert back to mode 1: Originally mode 1 was used, where a tethered iPhone appears as an Ethernet interface, handled by the ipheth driver. This has been the default for many years and is known to work on iPhone 3G, 4S, 7 Plus, 11 and newer. Since [2-3] ipheth supports CDC NCM in mode 1, and configures the iPhone to use it. In mode 3, the Ethernet interface is handled by kmod-usb-net-cdc-ncm. This driver has better performance, but now the iPhone does not provide DHCP or Internet connectivity, so we should revert to mode 1. Analysing the network traffic, shows that both the iPhone and OpenWRT are DHCP clients. The iPhone does not act as a DHCP server. I can set a static IP on OpenWRT and lease 172.20.10.1 to the iPhone. Then I can ping the iPhone and I have IPv4 connectivity. However the iPhone does not provide Internet connectivity to OpenWRT. Maybe in mode 3, the iPhone is a client meant to receive Internet over USB and therefore it is not a gateway? Attempts to switch old iPhones, such as 3G and 4S to mode 3 fail. They remain in mode 1 and work correctly using the ipheth driver. Comparison, tested on iPhone 7 Plus and 11 - mode 1 eth0 kmod-usb-net-ipheth 264 Mbit/s DHCP server, Internet - mode 3 usb0 kmod-usb-net-cdc-ncm 304 Mbit/s DHCP client, no Internet [1] https://github.com/libimobiledevice/usbmuxd/commit/c7a0dd9b82633ea347497626282e3051a469ef50 [2] https://github.com/torvalds/linux/commit/a2d274c62e44b1995c170595db3865c6fe701226 [3] https://github.com/openwrt/openwrt/commit/680f8738d02a1876ae4cd11aacf9cd56e520fadf Signed-off-by: Georgi Valkov <gvalkov@gmail.com>
2024-06-13usb: Rename usb_device struct member 'dev' to more appropriate 'handle'Gravatar Nikias Bassen1-15/+15
2023-09-29usb: Make sure buffer for vendor specific request is 0-initializedGravatar Nikias Bassen1-1/+1
2023-09-19usb: Set default mode to 3 to include CDC NCM, and fix a log messageGravatar Nikias Bassen1-2/+2
2023-03-01Set default value for ENV_DEV_MODEGravatar Clément Decoodt1-1/+2
Fixes regression introduced in 84801d8 that removed the default value.
2023-03-01Fix use-after-free on get_mode_cbGravatar Clément Decoodt1-1/+1
2022-12-24Guess current mode based on available configurations and interfaces.Gravatar Eliyahu Stern1-15/+73
Switch mode only if guess is different than desired mode.
2022-12-23correct logGravatar Eliyahu Stern1-1/+1
2022-12-23Simplify finding valid configuration, interface and endpoints and refactor ↵Gravatar Eliyahu Stern1-99/+87
to a separate function. This function can later be used to determine active mode.
2022-12-23Best effort for old devices (potentially not supporting mode switch) to ↵Gravatar Eliyahu Stern1-7/+28
ignore unexpected responses and complete initializations.
2022-12-23- Add device to collection in usb_device_addGravatar Eliyahu Stern1-52/+67
- Find and use it when completing initialization - Mark device as not alive instead of directly closing it - Debug and plug memory leaks
2022-12-22Factor out device_complete_initialization and call it from get_mode_cb.Gravatar Eliyahu Stern1-127/+141
Handle some memory issues.
2022-12-22styleGravatar Eliyahu Stern1-15/+17
2022-12-22Support switching to different "modes" using vendor specific control messages.Gravatar Eliyahu Stern1-8/+109
Use USBMUXD_DEFAULT_DEVICE_MODE env. var. to let the user control desired mode.
2021-09-25usb: Add more Apple Silicon retstore PIDsGravatar Hector Martin1-1/+2
1904 is the M1 iMac; presumably this is now a range Signed-off-by: Hector Martin <marcan@marcan.st>
2021-09-01Remove common code in favor of new libimobiledevice-glueGravatar Nikias Bassen1-0/+2
2021-05-08usb: Enable Apple Silicon restore modeGravatar Benjamin BOURGEAIS1-1/+2
2021-01-20Don't call libusb_set_option if libusb_init failsGravatar Frederik Carlier1-5/+5
2021-01-09usb: Don't warn about old configuration descriptor if device is unconfiguredGravatar Nikias Bassen1-1/+3
2021-01-09usb: Allow configuration 5 after verifying it is actualy usableGravatar Nikias Bassen1-1/+25
VMware on macOS somehow exposes a bad configuration 5 for iDevices. Trying to use it breaks things and can end up in a kernel panic on the device. The code change introduced with this commit tries its best to make sure the USB configuration 5 is not 'bad' before switching to it, and otherwise falling back to configuration 4.
2020-06-08Extend libusb version log output on startup to include micro version, tooGravatar Martin Szulecki1-1/+1
2020-06-08Use libusb_set_option() to set debug level depending on libusb versionGravatar Martin Szulecki1-1/+5
2020-06-07Use more descriptive libusb_error_name() instead of numeric codesGravatar Martin Szulecki1-23/+23
This makes it easier to recognize the related libusb error code in the logs rather than numeric error codes which needed to be looked up in the documentation
2020-06-07Map debug to log levels and enable debug output for libusbGravatar Martin Szulecki1-1/+3
2020-06-07Use helper to show current libusb version instead of hardcoding itGravatar Martin Szulecki1-1/+2
2019-12-16Support T2 chip in restore modeGravatar Rick Mark1-2/+3
2019-07-17Avoid using configuration 5Gravatar mrmacete1-4/+8
- this fixes setting configuration for iOS 11 devices inside virtual machines which caused timeout and subsequent reboot of the device when unplugged from USB
2018-10-12usb: Fix adding hyphen to new style UDIDs by not counting '\0' towards ↵Gravatar Nikias Bassen1-0/+2
string length
2018-10-05usb: Add hyphen to new style UDIDs introduced with iPhone XS/XRGravatar Nikias Bassen1-1/+8
2018-01-31usb: Remove leftover debug log outputGravatar Nikias Bassen1-1/+0
2018-01-08usb: Fix calculation of RX loop countGravatar Nikias Bassen1-0/+1
2018-01-08usb: Use heap buffer instead of making the usb_device struct largerGravatar Nikias Bassen1-6/+18
Since this buffer is only used during device initialization we don't want the usb_device struct to be unecessary big.
2018-01-08usb: Use libusb asynchronous I/O for getting initial device information.Gravatar Alexis Ballier1-35/+111
usb_device_add may now be called from libusb main loop via the hotplug callbacks. No blocking call must occur there and libusb 1.0.21 now returns an error when trying to perform blocking I/O in this callback. Should fix the error when hotpluging a device reported in #81
2018-01-08usb: Store the whole device descriptor in struct usb_deviceGravatar Alexis Ballier1-4/+3
2014-12-02usb: Implement device discovery using libusb hotplug eventsGravatar Nikias Bassen1-202/+268
2014-12-02Rename usb-linux.c to more suitable usb.cGravatar Nikias Bassen1-0/+680