• R/O
  • HTTP
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

system/corennnnn


Commit MetaInfo

修订版0469d2c37adddcb30cb0d88772bef33ac26c6500 (tree)
时间2009-05-23 07:28:51
作者Android (Google) Code Review <android-gerrit@goog...>
CommiterAndroid (Google) Code Review

Log Message

Merge change 2282 into donut

* changes:

Support for 3rd party USB Vendor IDs in adb.

更改概述

差异

--- a/adb/adb.c
+++ b/adb/adb.c
@@ -919,9 +919,6 @@ int adb_main(int is_daemon)
919919 fdevent_loop();
920920
921921 usb_cleanup();
922-#if ADB_HOST
923- usb_vendors_cleanup();
924-#endif
925922
926923 return 0;
927924 }
--- a/adb/adb.h
+++ b/adb/adb.h
@@ -357,11 +357,10 @@ typedef enum {
357357 #define ADB_PORT 5037
358358 #define ADB_LOCAL_TRANSPORT_PORT 5555
359359
360-// Google's USB Vendor ID
361-#define VENDOR_ID_GOOGLE 0x18d1
360+#define ADB_CLASS 0xff
361+#define ADB_SUBCLASS 0x42
362+#define ADB_PROTOCOL 0x1
362363
363-// HTC's USB Vendor ID
364-#define VENDOR_ID_HTC 0x0bb4
365364
366365 void local_init();
367366 int local_connect(int port);
--- a/adb/adb_client.c
+++ b/adb/adb_client.c
@@ -213,7 +213,7 @@ int adb_connect(const char *service)
213213 fprintf(stdout,"* daemon started successfully *\n");
214214 }
215215 /* give the server some time to start properly and detect devices */
216- adb_sleep_ms(2000);
216+ adb_sleep_ms(3000);
217217 // fall through to _adb_connect
218218 } else {
219219 // if server was running, check its version to make sure it is not out of date
--- a/adb/transport_usb.c
+++ b/adb/transport_usb.c
@@ -135,11 +135,9 @@ int is_adb_interface(int vid, int pid, int usb_class, int usb_subclass, int usb_
135135 unsigned i;
136136 for (i = 0; i < vendorIdCount; i++) {
137137 if (vid == vendorIds[i]) {
138- /* class:vendor (0xff) subclass:android (0x42) proto:adb (0x01) */
139- if(usb_class == 0xff) {
140- if((usb_subclass == 0x42) && (usb_protocol == 0x01)) {
141- return 1;
142- }
138+ if (usb_class == ADB_CLASS && usb_subclass == ADB_SUBCLASS &&
139+ usb_protocol == ADB_PROTOCOL) {
140+ return 1;
143141 }
144142
145143 return 0;
--- a/adb/usb_osx.c
+++ b/adb/usb_osx.c
@@ -32,9 +32,6 @@
3232
3333 #define DBG D
3434
35-#define ADB_SUBCLASS 0x42
36-#define ADB_PROTOCOL 0x1
37-
3835 static IONotificationPortRef notificationPort = 0;
3936 static io_iterator_t* notificationIterators;
4037
--- a/adb/usb_vendors.c
+++ b/adb/usb_vendors.c
@@ -16,25 +16,119 @@
1616
1717 #include "usb_vendors.h"
1818
19-#include "sysdeps.h"
2019 #include <stdio.h>
20+
21+#ifdef _WIN32
22+# define WIN32_LEAN_AND_MEAN
23+# include "windows.h"
24+# include "shlobj.h"
25+#else
26+# include <unistd.h>
27+# include <sys/stat.h>
28+#endif
29+
30+#include "sysdeps.h"
2131 #include "adb.h"
2232
23-int* vendorIds = NULL;
33+#define ANDROID_PATH ".android"
34+#define ANDROID_ADB_INI "adb_usb.ini"
35+
36+#define TRACE_TAG TRACE_USB
37+
38+// Google's USB Vendor ID
39+#define VENDOR_ID_GOOGLE 0x18d1
40+// HTC's USB Vendor ID
41+#define VENDOR_ID_HTC 0x0bb4
42+
43+/** built-in vendor list */
44+int builtInVendorIds[] = {
45+ VENDOR_ID_GOOGLE,
46+ VENDOR_ID_HTC,
47+};
48+
49+#define BUILT_IN_VENDOR_COUNT (sizeof(builtInVendorIds)/sizeof(builtInVendorIds[0]))
50+
51+/* max number of supported vendor ids (built-in + 3rd party). increase as needed */
52+#define VENDOR_COUNT_MAX 128
53+
54+int vendorIds[VENDOR_COUNT_MAX];
2455 unsigned vendorIdCount = 0;
2556
26-void usb_vendors_init(void) {
27- /* for now, only put the built-in VENDOR_ID_* */
28- vendorIdCount = 2;
29- vendorIds = (int*)malloc(vendorIdCount * sizeof(int));
30- vendorIds[0] = VENDOR_ID_GOOGLE;
31- vendorIds[1] = VENDOR_ID_HTC;
57+int get_adb_usb_ini(char* buff, size_t len);
58+
59+void usb_vendors_init(void)
60+{
61+ if (VENDOR_COUNT_MAX < BUILT_IN_VENDOR_COUNT) {
62+ fprintf(stderr, "VENDOR_COUNT_MAX not big enough for built-in vendor list.\n");
63+ exit(2);
64+ }
65+
66+ /* add the built-in vendors at the beginning of the array */
67+ memcpy(vendorIds, builtInVendorIds, sizeof(builtInVendorIds));
68+
69+ /* default array size is the number of built-in vendors */
70+ vendorIdCount = BUILT_IN_VENDOR_COUNT;
71+
72+ if (VENDOR_COUNT_MAX == BUILT_IN_VENDOR_COUNT)
73+ return;
74+
75+ char temp[PATH_MAX];
76+ if (get_adb_usb_ini(temp, sizeof(temp)) == 0) {
77+ FILE * f = fopen(temp, "rt");
78+
79+ if (f != NULL) {
80+ /* The vendor id file is pretty basic. 1 vendor id per line.
81+ Lines starting with # are comments */
82+ while (fgets(temp, sizeof(temp), f) != NULL) {
83+ if (temp[0] == '#')
84+ continue;
85+
86+ long value = strtol(temp, NULL, 0);
87+ if (errno == EINVAL || errno == ERANGE || value > INT_MAX || value < 0) {
88+ fprintf(stderr, "Invalid content in %s. Quitting.\n", ANDROID_ADB_INI);
89+ exit(2);
90+ }
91+
92+ vendorIds[vendorIdCount++] = (int)value;
93+
94+ /* make sure we don't go beyond the array */
95+ if (vendorIdCount == VENDOR_COUNT_MAX) {
96+ break;
97+ }
98+ }
99+ }
100+ }
32101 }
33102
34-void usb_vendors_cleanup(void) {
35- if (vendorIds != NULL) {
36- free(vendorIds);
37- vendorIds = NULL;
38- vendorIdCount = 0;
103+/* Utils methods */
104+
105+/* builds the path to the adb vendor id file. returns 0 if success */
106+int build_path(char* buff, size_t len, const char* format, const char* home)
107+{
108+ if (snprintf(buff, len, format, home, ANDROID_PATH, ANDROID_ADB_INI) >= len) {
109+ return 1;
110+ }
111+
112+ return 0;
113+}
114+
115+/* fills buff with the path to the adb vendor id file. returns 0 if success */
116+int get_adb_usb_ini(char* buff, size_t len)
117+{
118+#ifdef _WIN32
119+ const char* home = getenv("ANDROID_SDK_HOME");
120+ if (home != NULL) {
121+ return build_path(buff, len, "%s\\%s\\%s", home);
122+ } else {
123+ char path[MAX_PATH];
124+ SHGetFolderPath( NULL, CSIDL_PROFILE, NULL, 0, path);
125+ return build_path(buff, len, "%s\\%s\\%s", path);
39126 }
127+#else
128+ const char* home = getenv("HOME");
129+ if (home == NULL)
130+ home = "/tmp";
131+
132+ return build_path(buff, len, "%s/%s/%s", home);
133+#endif
40134 }
--- a/adb/usb_vendors.h
+++ b/adb/usb_vendors.h
@@ -17,10 +17,9 @@
1717 #ifndef __USB_VENDORS_H
1818 #define __USB_VENDORS_H
1919
20-extern int* vendorIds;
20+extern int vendorIds[];
2121 extern unsigned vendorIdCount;
2222
2323 void usb_vendors_init(void);
24-void usb_vendors_cleanup(void);
2524
2625 #endif
\ No newline at end of file