summaryrefslogtreecommitdiffstats
path: root/adb/adb.h
Commit message (Collapse)AuthorAgeFilesLines
* Merge "adb: Use kernel aio for functionfs."Treehugger Robot2017-08-291-2/+1
|\
| * adb: Use kernel aio for functionfs.Jerry Zhang2017-08-101-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This method works around the downsides of ENDPOINT_ALLOC, namely that it is not affected by memory fragmentation and it uses an upstream interface. Also add libasyncio to provide the necessary syscalls to both adb and mtp. Add some small optimizations to file_sync. Bug: 37916658 Test: run adb push/pull Change-Id: If3b3be02b5e2d4f9cffec1b8ddc02a5768a51a1f
* | adb: allow selection of a specific transport.Josh Gao2017-08-211-3/+6
|/ | | | | | | | | | | | Extend device selection to allow selecting a specific transport via monotonically increasing identifier (visible in devices -l). This is useful when using multiple devices (like hikey960...) that have identical bogus serial numbers like 0123456789ABCDEF. Bug: http://b/37043226 Test: adb -t {1, 2, 9999999} {get-serialno, shell, features} Change-Id: I55e5dc5a406a4eeee0012e39b52e8cd232e608a6
* adb: wait for devices to come up instead of sleeping for 3s.Josh Gao2017-05-041-0/+14
| | | | | | | | | | | | | | | Replace a hard-coded 3 second sleep with logic to wait until we've scanned USB devices once and they've all come online. Before: adb shell true 0.00s user 0.00s system 0% cpu 3.047 total After: adb shell true 0.00s user 0.00s system 9% cpu 0.041 total Bug: http://b/37869663 Test: `time adb shell true` after adb kill-server Change-Id: I251d42afb885908ed9d03167287594ea16650d3f
* adb: fix two device offline problems.Yabin Cui2017-04-201-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When device goes offline, user usually has to manually replug the usb device. This patch tries to solve two offline situations, all because when adb on host is killed, the adbd on device is not notified. 1. When adb server is killed while pushing a large file to device, the device is still reading the unfinished large message. So the device thinks of the CNXN message as part of the previous unfinished message, so it doesn't reply and the device is in offline state. The solution is to add a write_msg_lock in atransport struct. And it kicks the transport only after sending a whole message. By kicking all transports before exit, we ensure that we don't write part of a message to any device. So next time we start adb server, the device should be waiting for a new message. 2. When adb server is killed while pulling a large file from device, the device is still trying to send the unfinished large message. So adb on host usually reads data with EOVERFLOW error. This is because adb on host is reading less than one packet sent from device. The solution is to use buffered read on host. The max packet size of bulk transactions in USB 3.0 is 1024 bytes. By preparing an at least 1024 bytes buffer when reading, EOVERFLOW no longer occurs. And teach adb host to ignore wrong messages. To be safe, this patch doesn't change any logic on device. Bug: http://b/32952319 Test: run python -m unittest -q test_device.DeviceOfflineTest Test: on linux/mac/windows with bullhead, ryu. Change-Id: Ib149d30028a62a6f03857b8a95ab5a1d6e9b9c4e
* adb: add `adb host-features`, report libusb status.Josh Gao2017-02-221-1/+1
| | | | | | | | | Add a 'host-features' command to get the features of the currently running host adb server. Abuse it to report libusb status. Bug: http://b/34983123 Test: adb host-features; adb kill-server; ADB_LIBUSB=1 adb start-server; adb host-features Change-Id: I0e8d503a2dbdff9002ebb6ce8a298498a9421422
* adb: Set max socket sizes to larger values.Jerry Zhang2017-02-131-0/+2
| | | | | | | | This improves performance of push/pull. Test: adb push/pull multi GB files. Bug: 31722483 Change-Id: Ia01574c3db6a740d7a7e64ba1f5bc1fc279fb3f6
* adb: add libusb implementation for Linux/Darwin.Josh Gao2017-01-251-13/+1
| | | | | | | | | | | Add a libusb-based implementation alongside the existing native implementations, controlled by the ADB_LIBUSB environment variable. Windows will need more work for the usb driver. Bug: http://b/31321337 Test: python test_device.py on linux/darwin, with ADB_LIBUSB=0 and 1 Change-Id: Ib68fb2c6c05475eae3ff4cc19f55802a6f489bb7
* adb: remove support for legacy f_adb interface.Josh Gao2017-01-111-2/+0
| | | | | | | | | Everything should be using the functionfs interface instead by now. Bug: http://b/34228376 Test: grepping for f_adb, android_adb in source tree Test: m Change-Id: I6bc41049c49a867499832588dac8ed108c636c11
* Revert "Revert "adb: extend sync protocol's stat support.""Josh Gao2016-12-051-1/+1
| | | | | | | | | | | This reverts commit afa4b5d6eb45bbee8671a1bb93ea70506fb326e3. Add functions to translate errno to and from the linux asm-generic values, since mips has different values. Bug: http://b/33058958 Test: python test_device.py with both old and new adbd Change-Id: I1a122235f3e793ed10b3bf3ad293388015134150
* Revert "adb: extend sync protocol's stat support."Josh Gao2016-12-051-1/+1
| | | | This reverts commit d6d5c38469203a63c686517d765a7e6d2bc24656.
* adb: extend sync protocol's stat support.Josh Gao2016-11-301-1/+1
| | | | | | | | | Extend the file sync protocol to support calling regular stat (instead of lstat), return error codes, and provide the entire stat struct. Bug: http://b/33058958 Test: python test_device.py with both old and new adbd Change-Id: I841123debc380f86194a19e91c97d85160112144
* Fix adb flakiness on rebootLingfeng Yang2016-10-111-0/+2
| | | | | | | | | | | | | | | bug: 31950237 There are two lists of active ADB transports (devices), and with the emulator, they can go out of sync. This CL more conservatively checks if there are no transports in either list before commiting to register a new transport for the emulator. (cherry picked from commit edaedfd5da41b2f5aa14b4d52742a6d8caa49214) Change-Id: Id1201dc59c70825881dad80925c2e5bcc13dbd5e
* Merge "Remove useless arguments from is_adb_interface."Treehugger Robot2016-10-101-1/+1
|\
| * Remove useless arguments from is_adb_interface.Josh Gao2016-10-101-1/+1
| | | | | | | | | | Test: mma Change-Id: I8b7b411d7d5ec9d401b61ed8f817b98c61114d4f
* | adb: rationalize types.Josh Gao2016-10-061-9/+12
|/ | | | | | | | | | Use fixed length types for structs going over the wire, constify arguments where possible, use char* instead of unsigned char* for apacket data, and assorted other refactoring. Bug: http://b/29273531 Test: python test_device.py with every combination of old/new adb and adbd Change-Id: I0b6f818a32be5386985aa4519f542003cf427f9d
* adb: allow use of arbitrary socket specs for command socket.Josh Gao2016-09-011-2/+2
| | | | | Bug: http://b/30445394 Change-Id: I474ede35ec3c56ad86da503c9703f83ef5e80862
* Add android::base::GetExecutablePath, switch adb and fastboot over.Elliott Hughes2016-09-011-1/+0
| | | | | | | | | We'd long had two copies of this stuff, so rather than rewrite both Linux versions to use android::base::Readlink, let's kill the duplication too... Bug: http://b/30988271 Change-Id: I4de58a94a22a4b1faf969a6fc70ca1560a4d5121
* DO NOT MERGE: Split bugreport() into its own file and added unit tests.Felipe Leme2016-08-301-2/+0
| | | | | | | | | | | | | | | bugreport() will be soon refactored to track progress, which will require more comprehensive unit tests. As such, it's better to move it to its own files, which in turn also requires moving send_shell_command() and usage() to commandline.h. Fixes: 30100363 Bug: 30268737 Change-Id: I3cdf114a0b5547293320042ff0749a60886440b0 (cherry picked from commit 78e0963e4bce9cc9f0bbf0b686004ba15b1e3929) (cherry picked from commit 218e1ff75998052c7bb30b483c15e75a853283a8)
* adb: retry connecting disconnected emulators instead of always looping.Yabin Cui2016-05-241-1/+1
| | | | | | | | | | | Previously we loop through local ports every second, this patch improves the strategy by retrying only just disconnected emulators. Bug: 26468076 Bug: 19974213 Bug: 22920867 Change-Id: I43ccb746922d104202b0f81a3d163d850bbc890e
* adb: support forwarding TCP port 0.David Pursell2016-05-091-24/+1
| | | | | | | | | | | | | | | | | | | | | | | | | This CL adds support to forward or reverse TCP port 0 to allow the system to automatically select an open port. The resolved port number will be printed to stdout: $ adb forward tcp:0 tcp:8000 12345 $ adb reverse tcp:0 tcp:9000 23456 This allows testing to be more robust by not hardcoding TCP ports which may already be in use. Forwarding port 0 is a host-only change and will work with any device, but reversing port 0 requires the device to be updated with a new adbd binary. This CL also does a little bit of cleanup such as moving the alistener class out of adb.h, and adds some error checking and additional tests. Bug: 28051746 Test: python -m unittest discover Test: adb_test Test: `adb forward` and `adb reverse` with tcp:0 Change-Id: Icaa87346685b403ab5da7f0e6aa186aa091da572
* adb: bump the server version to 36.Josh Gao2016-04-151-1/+1
| | | | | | | | The recent `adb root` changes are incompatible with older versions of the server. Bump the version number to force the server to restart. Bug: http://b/28194507 Change-Id: I970806e3b68c1f8e3273a4b1f0ecc4aca5086be9
* adb: tag fatal, fatal_errno with printf attribute.Josh Gao2016-01-151-4/+4
| | | | | | | Also, fix bugs that this uncovered. In particular, the sysdeps_win32 FATAL macro would only print __FUNCTION__. Change-Id: I6307ec9749edec21b4fee192e135a86ec445c84b
* Share the new adb USB diagnostic code with fastboot.Elliott Hughes2015-12-141-5/+0
| | | | | Bug: http://b/26134129 Change-Id: Ieaf0651c7b3f8a028760982091ec63a21a5484ba
* Merge "adb: add help text for USB permission errors."David Pursell2015-12-081-2/+7
|\
| * adb: add help text for USB permission errors.David Pursell2015-12-031-2/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The current permission messages can be confusing for users who don't know about udev and USB access permissions. This CL adds some checks to try to identify common udev problems, and adds a link to online documentation. Example messages: 1) adb server is in plugdev group but access is still denied: $ adb devices List of devices attached 082f59270073e1e3 no permissions (verify udev rules); see [developer.android.com/tools/device.html] 2) plugdev group exists but adb server is not in it: $ adb shell error: USB permission failure: udev requires plugdev group membership. See [developer.android.com/tools/device.html] for more information. 3) plugdev group does not exist: $ adb shell error: USB permission failure. See [developer.android.com/tools/device.html] for more information. Bug: http://b/25777880 Change-Id: I536565adc12ab657c75151309795674181205db0
* | Track rename of base/ to android-base/.Elliott Hughes2015-12-041-1/+1
|/ | | | Change-Id: Idf9444fece4aa89c93e15640de59a91f6e758ccf
* Avoid SIGPIPE in adb.Elliott Hughes2015-11-201-1/+1
| | | | | | | | | | | | | | | | | | | We're now able to send packets faster than the device can handle them, meaning that sometimes we're several packets through before the device says "hey, wait, I can't write" and closes the connection. At best this led to us reporting that we couldn't sync because "Connection reset"; at worst we'd get SIGPIPE because we were still streaming to a connection that had already been closed. This change renames adb_main adb_server_main, and moves the ignoring of SIGPIPE into adb_commandline so it applies to both client and server (but not adbd). This change doesn't address the "wrong error message" part of the problem, but at least it means you'll get *an* error message. Bug: http://b/25230872 Change-Id: Ic60e4d13ed03fdcdf0d5cbc97201ebd1097c16ed
* use new cmd commandTodd Kennedy2015-11-061-1/+1
| | | | | | | | | Instead of using the pm command, 'adb install' and 'adb uninstall' will now use the cmd command. Additionally, the APK will be streamed directly to package installer instead of creating a temporary file. (cherry-pick of d039800a4e008b52c532f901e3bb34b40877cf30.) Change-Id: Ie7529afa5b039d29cc8183f36085ff4e66b3457a
* adb: put legacy shell: service back in.David Pursell2015-09-301-1/+1
| | | | | | | | | | | | | | | | | | | | ddmlib does not use the ADB client, but instead connects directly to the adb server. This breaks some of the assumptions I previously made when enabling the shell protocol. To fix this, the adb server now defaults to no protocol for the standalone command, and the shell protocol must be explicitly requested by the client. For example: shell:echo foo -- no shell protocol shell,v2:echo foo -- shell protocol As long as I was touching the shell service arguments I also changed them to no longer duplicate the command-line arguments. This allows more flexibility to change the adb client CLI if necessary and makes the code more readable. Bug: http://b/24148636 Change-Id: I28d5ae578cf18cbe79347dc89cea1750ff4571a8
* adb: bump server version to prevent feature mismatch.David Pursell2015-09-251-1/+1
| | | | | | | | | | | | | | | | | | | Devices get a list of supported features from the adb server, not the client, so a mismatch between client and server features can cause the device to use an incorrect feature set. Bumping the server version is the easiest way to make sure the client and server features match and seems like the best solution at the moment. A more automated fix could be to compare client/server features on each connection and restart if they don't match. This requires an extra client <-> server round-trip per command, but removes the need to manually bump the server version number on feature change. Unless the feature set changes often it didn't seem worth the extra overhead. Bug: http://b/24370690 Change-Id: I4e43825d1c15c61e5d924fc8d4110b467debde37
* Add unit tests for local socket.Yabin Cui2015-09-161-85/+1
| | | | | | | | | | | | Add has_write_error flag in asocket, so it will not wait on local_socket_closing_list to write pending packets in local_socket_close(). Although it doesn't fix any problem, it helps to make the code more stable. Add a missing put_apacket() in error handling. Add a check when adding local socket in local_socket_closing_list. Bug: 23314034 Change-Id: I75b07ba8ee59b7f277fba2fb919db63065b291be
* adb: implement shell protocol.David Pursell2015-09-111-2/+3
| | | | | | | | | | | | | | | | | Adds functionality for handling stdin/stdout/stderr streams and exit codes using the shell protocol. This CL just contains implementation for adbd which will not yet be enabled. Once we have the ability to query transport features from the adb client, another CL will add the implementation for the client side and update the feature list to turn this on. Note: this CL must be submitted together with a minadbd CL to update the service_to_fd() function signature. Bug: http://b/23030641 Change-Id: Ibed55e9c1946d8a35190696163ff63e8fb880238
* Merge "fatal and fatal_errno should be noreturn."Elliott Hughes2015-08-291-2/+2
|\
| * fatal and fatal_errno should be noreturn.Elliott Hughes2015-08-281-2/+2
| | | | | | | | Change-Id: I9c5d9cb5ed743d13e65112a111cc9544ec5da339
* | adb: clean up transport disconnect operations.Yabin Cui2015-08-281-2/+0
|/ | | | | | | Move operations from global functions into member functions. Add unit test. Change-Id: Id4543d8e78541eb08c8e629f180c605c699737ec
* Add feature list to connection banner.Dan Albert2015-08-141-68/+6
| | | | | | | | | | | This allows us to test for features explicitly rather than relying on the protocol version number, allowing us to fall back gracefully if a feature is not supported. This will be needed for the upcoming shell upgrades for stdout/stderr separation and exit code reporting. Change-Id: Ibb1d8ad2611f7209901ee76d51346b453e9c5873
* Merge "Remove confusing variable HOST."Yabin Cui2015-08-121-1/+0
|\
| * Remove confusing variable HOST.Yabin Cui2015-08-111-1/+0
| | | | | | | | | | | | | | | | | | | | | | First, HOST is always 0 in adbd, which matches ADB_HOST=0. Second, HOST is always 1 when adb_main is called, which matches ADB_HOST=1. For adb client that doesn't call adb_main, it never touches local_init(), init_transport_registration() and fdevent_loop(). So the changes in adb.cpp, services.cpp and transport_local.cpp do nothing with it. As a conclusion, I think we can remove HOST and use ADB_HOST instead. Change-Id: Ide0e0eca7468b6c3c130f6b50974406280678b2e
* | Always include the adb version in the log.Elliott Hughes2015-08-121-0/+2
|/ | | | | | | "Are you running the right version?" seems to be a common cause of debugging confusion. Change-Id: I4a4ba95e876dafc05e515058ca059ea370273f78
* adb start-server: Use a separate fd for sending initial OKSiva Velusamy2015-08-071-1/+1
| | | | | | | | | | | | | | | | When "adb start-server" is issued, and a server needs to be launched, adb client forks itself and the child process runs the server routine. Once the server initializes its various components, it sends an "OK\n" back to the client via its stderror (or stdout on Windows). This sequence breaks down if before sending the "OK\n", the server happens to log something on its stderr. In order to avoid this, the client now expects the ack to come on a different fd rather than one of the standard streams. Bug: https://code.google.com/p/android/issues/detail?id=182150 Change-Id: I9d58a08068d71eb3b77e8a7377e934631c016466
* Report getaddrinfo failures correctly.Elliott Hughes2015-07-231-2/+4
| | | | | | | Also move us off the "convenience" function because you can't get useful error reporting from it. Change-Id: I5fcc6a6d762f5f60906980a7835f01a35045be65
* Increase size of the the adb packets sent over the wireTamas Berghammer2015-07-221-1/+14
| | | | | | | | | | | | | | | | | | | | | | | | The reason behing this change is to increase the adb push/pull speed with reduceing the number of packets sent between the host and the device because the communication is heavily bound by packet latency. The change maintains two way compatibility in the communication protocol with negotiating a packet size between the target and the host with the CONNECT packets. After this change the push/pull speeds improved significantly (measured from Linux-x86_64 with 100MB of data): | Old push | Old pull || New push | New pull | ----------------------------------------------------------- Hammerhead | 4.6 MB/s | 3.9 MB/s || 13.1 MB/s | 16.5 MB/s | ----------------------------------------------------------- Volantis | 6.0 MB/s | 6.2 MS/s || 25.9 MB/s | 29.0 MB/s | ----------------------------------------------------------- Fugu | 6.0 MB/s | 5.1 MB/s || 27.9 MB/s | 33.2 MB/s | ----------------------------------------------------------- Change-Id: Id9625de31266e43394289e325c7e7e473379c5d8
* Remove subproc events when ADB_HOST.Alex Vallée2015-07-171-0/+2
| | | | | | | The code which triggers these events (via the SHELL_EXIT_NOTIFY_FD) are only called from code which is already guarded by #if !ADB_HOST. Change-Id: I184414f5e090c1f08ee117e4c8c434cd4a8b5221
* Revert "Turn on -Wformat-nonliteral."Dan Albert2015-07-091-2/+2
| | | | | | | | One of my build aliases doesn't play nice with USE_MINGW=1, so my build lied to me. Will revert until I fix it up. This reverts commit 459df8f3a14d4c614f0211049800cf7cad6d30ad. Change-Id: I7905c5ae5ee85fb2d228ce63d81c79f140998c18
* Turn on -Wformat-nonliteral.Dan Albert2015-07-091-2/+2
| | | | | | | | | | | | | Apparently there are two classes of this warning in clang. -Wformat-security is only emitted for cases of `func(nonliteral_fmt_string)` (no args), and -Wformat-nonliteral is emitted for cases *with* arguments. For whatever reason, the latter isn't included in -Wextra and must be manually enabled. To make this more easily portable to Windows, move the existing gnu_printf/__printf__ decision into base/macros.h as ATTRIBUTE_FORMAT. Change-Id: I3b0990e1d1f0a2e9c13b32f5cd60478946cb5fc6
* Make atransport be a real class.Dan Albert2015-05-211-49/+62
| | | | | | | | | | | | | Using non-POD types in atransport means we'll need to start treating it as a real class (specifically with regards to new/delete rather than malloc/free). I've also cleaned up the home grown linked lists for transport_list and pending_list to just be std::lists. We might want to refactor that again to be an std::unordered_map keyed on serial, since that seems to be a common way to search it. Change-Id: I7f5e23cdc47944a9278099723ca029585fe52105
* Make connection states a proper type.Dan Albert2015-05-181-12/+14
| | | | Change-Id: I809f9b327c832b88dd63151bf7dcb012d88e81c4
* Revert "Revert "Split adb_main.cpp into client and daemon.""Dan Albert2015-05-081-1/+0
| | | | | | This reverts commit 218dbccefa3d874d988e4784bda5e45b7643cb5a. Change-Id: I74088db34983dc99e316a07c6ddc294340e0eb71
* Revert "Split adb_main.cpp into client and daemon."Dan Albert2015-05-081-0/+1
| | | | This reverts commit cf07494ac2a101c3afbe23a7d85121553f586cf7.