~nexulockr-dev/nexulockr/android-tools

« back to all changes in this revision

Viewing changes to core/adb/usb_vendors.c

  • Committer: Ian Santopietro
  • Date: 2014-05-30 17:55:06 UTC
  • Revision ID: isantop@gmail.com-20140530175506-7irb6lx626i8d2j8
Set up proper function for all nexus devices in the Udev rule.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2009 The Android Open Source Project
 
3
 *
 
4
 * Licensed under the Apache License, Version 2.0 (the "License");
 
5
 * you may not use this file except in compliance with the License.
 
6
 * You may obtain a copy of the License at
 
7
 *
 
8
 *      http://www.apache.org/licenses/LICENSE-2.0
 
9
 *
 
10
 * Unless required by applicable law or agreed to in writing, software
 
11
 * distributed under the License is distributed on an "AS IS" BASIS,
 
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
13
 * See the License for the specific language governing permissions and
 
14
 * limitations under the License.
 
15
 */
 
16
 
 
17
#include "usb_vendors.h"
 
18
 
 
19
#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"
 
31
#include "adb.h"
 
32
 
 
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
// Intel's USB Vendor ID
 
41
#define VENDOR_ID_INTEL         0x8087
 
42
// HTC's USB Vendor ID
 
43
#define VENDOR_ID_HTC           0x0bb4
 
44
// Samsung's USB Vendor ID
 
45
#define VENDOR_ID_SAMSUNG       0x04e8
 
46
// Motorola's USB Vendor ID
 
47
#define VENDOR_ID_MOTOROLA      0x22b8
 
48
// LG's USB Vendor ID
 
49
#define VENDOR_ID_LGE           0x1004
 
50
// Huawei's USB Vendor ID
 
51
#define VENDOR_ID_HUAWEI        0x12D1
 
52
// Acer's USB Vendor ID
 
53
#define VENDOR_ID_ACER          0x0502
 
54
// Sony Ericsson's USB Vendor ID
 
55
#define VENDOR_ID_SONY_ERICSSON 0x0FCE
 
56
// Foxconn's USB Vendor ID
 
57
#define VENDOR_ID_FOXCONN       0x0489
 
58
// Dell's USB Vendor ID
 
59
#define VENDOR_ID_DELL          0x413c
 
60
// Nvidia's USB Vendor ID
 
61
#define VENDOR_ID_NVIDIA        0x0955
 
62
// Garmin-Asus's USB Vendor ID
 
63
#define VENDOR_ID_GARMIN_ASUS   0x091E
 
64
// Sharp's USB Vendor ID
 
65
#define VENDOR_ID_SHARP         0x04dd
 
66
// ZTE's USB Vendor ID
 
67
#define VENDOR_ID_ZTE           0x19D2
 
68
// Kyocera's USB Vendor ID
 
69
#define VENDOR_ID_KYOCERA       0x0482
 
70
// Pantech's USB Vendor ID
 
71
#define VENDOR_ID_PANTECH       0x10A9
 
72
// Qualcomm's USB Vendor ID
 
73
#define VENDOR_ID_QUALCOMM      0x05c6
 
74
// On-The-Go-Video's USB Vendor ID
 
75
#define VENDOR_ID_OTGV          0x2257
 
76
// NEC's USB Vendor ID
 
77
#define VENDOR_ID_NEC           0x0409
 
78
// Panasonic Mobile Communication's USB Vendor ID
 
79
#define VENDOR_ID_PMC           0x04DA
 
80
// Toshiba's USB Vendor ID
 
81
#define VENDOR_ID_TOSHIBA       0x0930
 
82
// SK Telesys's USB Vendor ID
 
83
#define VENDOR_ID_SK_TELESYS    0x1F53
 
84
// KT Tech's USB Vendor ID
 
85
#define VENDOR_ID_KT_TECH       0x2116
 
86
// Asus's USB Vendor ID
 
87
#define VENDOR_ID_ASUS          0x0b05
 
88
// Philips's USB Vendor ID
 
89
#define VENDOR_ID_PHILIPS       0x0471
 
90
// Texas Instruments's USB Vendor ID
 
91
#define VENDOR_ID_TI            0x0451
 
92
// Funai's USB Vendor ID
 
93
#define VENDOR_ID_FUNAI         0x0F1C
 
94
// Gigabyte's USB Vendor ID
 
95
#define VENDOR_ID_GIGABYTE      0x0414
 
96
// IRiver's USB Vendor ID
 
97
#define VENDOR_ID_IRIVER        0x2420
 
98
// Compal's USB Vendor ID
 
99
#define VENDOR_ID_COMPAL        0x1219
 
100
// T & A Mobile Phones' USB Vendor ID
 
101
#define VENDOR_ID_T_AND_A       0x1BBB
 
102
// LenovoMobile's USB Vendor ID
 
103
#define VENDOR_ID_LENOVOMOBILE  0x2006
 
104
// Lenovo's USB Vendor ID
 
105
#define VENDOR_ID_LENOVO        0x17EF
 
106
// Vizio's USB Vendor ID
 
107
#define VENDOR_ID_VIZIO         0xE040
 
108
// K-Touch's USB Vendor ID
 
109
#define VENDOR_ID_K_TOUCH       0x24E3
 
110
// Pegatron's USB Vendor ID
 
111
#define VENDOR_ID_PEGATRON      0x1D4D
 
112
// Archos's USB Vendor ID
 
113
#define VENDOR_ID_ARCHOS        0x0E79
 
114
// Positivo's USB Vendor ID
 
115
#define VENDOR_ID_POSITIVO      0x1662
 
116
// Fujitsu's USB Vendor ID
 
117
#define VENDOR_ID_FUJITSU       0x04C5
 
118
// Lumigon's USB Vendor ID
 
119
#define VENDOR_ID_LUMIGON       0x25E3
 
120
// Quanta's USB Vendor ID
 
121
#define VENDOR_ID_QUANTA        0x0408
 
122
// INQ Mobile's USB Vendor ID
 
123
#define VENDOR_ID_INQ_MOBILE    0x2314
 
124
// Sony's USB Vendor ID
 
125
#define VENDOR_ID_SONY          0x054C
 
126
// Lab126's USB Vendor ID
 
127
#define VENDOR_ID_LAB126        0x1949
 
128
// Yulong Coolpad's USB Vendor ID
 
129
#define VENDOR_ID_YULONG_COOLPAD 0x1EBF
 
130
// Kobo's USB Vendor ID
 
131
#define VENDOR_ID_KOBO          0x2237
 
132
// Teleepoch's USB Vendor ID
 
133
#define VENDOR_ID_TELEEPOCH     0x2340
 
134
 
 
135
 
 
136
/** built-in vendor list */
 
137
int builtInVendorIds[] = {
 
138
    VENDOR_ID_GOOGLE,
 
139
    VENDOR_ID_INTEL,
 
140
    VENDOR_ID_HTC,
 
141
    VENDOR_ID_SAMSUNG,
 
142
    VENDOR_ID_MOTOROLA,
 
143
    VENDOR_ID_LGE,
 
144
    VENDOR_ID_HUAWEI,
 
145
    VENDOR_ID_ACER,
 
146
    VENDOR_ID_SONY_ERICSSON,
 
147
    VENDOR_ID_FOXCONN,
 
148
    VENDOR_ID_DELL,
 
149
    VENDOR_ID_NVIDIA,
 
150
    VENDOR_ID_GARMIN_ASUS,
 
151
    VENDOR_ID_SHARP,
 
152
    VENDOR_ID_ZTE,
 
153
    VENDOR_ID_KYOCERA,
 
154
    VENDOR_ID_PANTECH,
 
155
    VENDOR_ID_QUALCOMM,
 
156
    VENDOR_ID_OTGV,
 
157
    VENDOR_ID_NEC,
 
158
    VENDOR_ID_PMC,
 
159
    VENDOR_ID_TOSHIBA,
 
160
    VENDOR_ID_SK_TELESYS,
 
161
    VENDOR_ID_KT_TECH,
 
162
    VENDOR_ID_ASUS,
 
163
    VENDOR_ID_PHILIPS,
 
164
    VENDOR_ID_TI,
 
165
    VENDOR_ID_FUNAI,
 
166
    VENDOR_ID_GIGABYTE,
 
167
    VENDOR_ID_IRIVER,
 
168
    VENDOR_ID_COMPAL,
 
169
    VENDOR_ID_T_AND_A,
 
170
    VENDOR_ID_LENOVOMOBILE,
 
171
    VENDOR_ID_LENOVO,
 
172
    VENDOR_ID_VIZIO,
 
173
    VENDOR_ID_K_TOUCH,
 
174
    VENDOR_ID_PEGATRON,
 
175
    VENDOR_ID_ARCHOS,
 
176
    VENDOR_ID_POSITIVO,
 
177
    VENDOR_ID_FUJITSU,
 
178
    VENDOR_ID_LUMIGON,
 
179
    VENDOR_ID_QUANTA,
 
180
    VENDOR_ID_INQ_MOBILE,
 
181
    VENDOR_ID_SONY,
 
182
    VENDOR_ID_LAB126,
 
183
    VENDOR_ID_YULONG_COOLPAD,
 
184
    VENDOR_ID_KOBO,
 
185
    VENDOR_ID_TELEEPOCH,
 
186
};
 
187
 
 
188
#define BUILT_IN_VENDOR_COUNT    (sizeof(builtInVendorIds)/sizeof(builtInVendorIds[0]))
 
189
 
 
190
/* max number of supported vendor ids (built-in + 3rd party). increase as needed */
 
191
#define VENDOR_COUNT_MAX         128
 
192
 
 
193
int vendorIds[VENDOR_COUNT_MAX];
 
194
unsigned vendorIdCount = 0;
 
195
 
 
196
int get_adb_usb_ini(char* buff, size_t len);
 
197
 
 
198
void usb_vendors_init(void)
 
199
{
 
200
    if (VENDOR_COUNT_MAX < BUILT_IN_VENDOR_COUNT) {
 
201
        fprintf(stderr, "VENDOR_COUNT_MAX not big enough for built-in vendor list.\n");
 
202
        exit(2);
 
203
    }
 
204
 
 
205
    /* add the built-in vendors at the beginning of the array */
 
206
    memcpy(vendorIds, builtInVendorIds, sizeof(builtInVendorIds));
 
207
 
 
208
    /* default array size is the number of built-in vendors */
 
209
    vendorIdCount = BUILT_IN_VENDOR_COUNT;
 
210
 
 
211
    if (VENDOR_COUNT_MAX == BUILT_IN_VENDOR_COUNT)
 
212
        return;
 
213
 
 
214
    char temp[PATH_MAX];
 
215
    if (get_adb_usb_ini(temp, sizeof(temp)) == 0) {
 
216
        FILE * f = fopen(temp, "rt");
 
217
 
 
218
        if (f != NULL) {
 
219
            /* The vendor id file is pretty basic. 1 vendor id per line.
 
220
               Lines starting with # are comments */
 
221
            while (fgets(temp, sizeof(temp), f) != NULL) {
 
222
                if (temp[0] == '#')
 
223
                    continue;
 
224
 
 
225
                long value = strtol(temp, NULL, 0);
 
226
                if (errno == EINVAL || errno == ERANGE || value > INT_MAX || value < 0) {
 
227
                    fprintf(stderr, "Invalid content in %s. Quitting.\n", ANDROID_ADB_INI);
 
228
                    exit(2);
 
229
                }
 
230
 
 
231
                vendorIds[vendorIdCount++] = (int)value;
 
232
 
 
233
                /* make sure we don't go beyond the array */
 
234
                if (vendorIdCount == VENDOR_COUNT_MAX) {
 
235
                    break;
 
236
                }
 
237
            }
 
238
        }
 
239
    }
 
240
}
 
241
 
 
242
/* Utils methods */
 
243
 
 
244
/* builds the path to the adb vendor id file. returns 0 if success */
 
245
int build_path(char* buff, size_t len, const char* format, const char* home)
 
246
{
 
247
    if (snprintf(buff, len, format, home, ANDROID_PATH, ANDROID_ADB_INI) >= (signed)len) {
 
248
        return 1;
 
249
    }
 
250
 
 
251
    return 0;
 
252
}
 
253
 
 
254
/* fills buff with the path to the adb vendor id file. returns 0 if success */
 
255
int get_adb_usb_ini(char* buff, size_t len)
 
256
{
 
257
#ifdef _WIN32
 
258
    const char* home = getenv("ANDROID_SDK_HOME");
 
259
    if (home != NULL) {
 
260
        return build_path(buff, len, "%s\\%s\\%s", home);
 
261
    } else {
 
262
        char path[MAX_PATH];
 
263
        SHGetFolderPath( NULL, CSIDL_PROFILE, NULL, 0, path);
 
264
        return build_path(buff, len, "%s\\%s\\%s", path);
 
265
    }
 
266
#else
 
267
    const char* home = getenv("HOME");
 
268
    if (home == NULL)
 
269
        home = "/tmp";
 
270
 
 
271
    return build_path(buff, len, "%s/%s/%s", home);
 
272
#endif
 
273
}