1a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet/* 2a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet * Copyright (C) 2009 The Android Open Source Project 3a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet * 4a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet * Licensed under the Apache License, Version 2.0 (the "License"); 5a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet * you may not use this file except in compliance with the License. 6a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet * You may obtain a copy of the License at 7a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet * 8a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet * http://www.apache.org/licenses/LICENSE-2.0 9a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet * 10a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet * Unless required by applicable law or agreed to in writing, software 11a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS, 12a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet * See the License for the specific language governing permissions and 14a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet * limitations under the License. 15a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet */ 16a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet 17a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet#include "usb_vendors.h" 18a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet 19a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet#include <stdio.h> 200eabf64ce0c649e4ef691ae1b70cb20d599dd429Christopher Ferris#include <stdlib.h> 21a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 22a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#ifdef _WIN32 230eabf64ce0c649e4ef691ae1b70cb20d599dd429Christopher Ferris# ifndef WIN32_LEAN_AND_MEAN 240eabf64ce0c649e4ef691ae1b70cb20d599dd429Christopher Ferris# define WIN32_LEAN_AND_MEAN 250eabf64ce0c649e4ef691ae1b70cb20d599dd429Christopher Ferris# endif 26a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet# include "windows.h" 27a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet# include "shlobj.h" 28a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#else 29a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet# include <unistd.h> 30a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet# include <sys/stat.h> 31a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#endif 32a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 33a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#include "sysdeps.h" 34a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet#include "adb.h" 35a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet 36a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#define ANDROID_PATH ".android" 37a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#define ANDROID_ADB_INI "adb_usb.ini" 38a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 39a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#define TRACE_TAG TRACE_USB 40a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 41293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross/* Keep the list below sorted alphabetically by #define name */ 427953b89e8d68565d15791618146a712231683d09Robert CH Chou// Acer's USB Vendor ID 437953b89e8d68565d15791618146a712231683d09Robert CH Chou#define VENDOR_ID_ACER 0x0502 4463f0f5117bb8ca781a8d9c9a66f5cba755e6005eDanielMo// Allwinner's USB Vendor ID 4563f0f5117bb8ca781a8d9c9a66f5cba755e6005eDanielMo#define VENDOR_ID_ALLWINNER 0x1F3A 46d5dab6d5f85e7c03f08614918088a33ce73abcf5DanielMo// Amlogic's USB Vendor ID 47d5dab6d5f85e7c03f08614918088a33ce73abcf5DanielMo#define VENDOR_ID_AMLOGIC 0x1b8e 48293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// AnyDATA's USB Vendor ID 49293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_ANYDATA 0x16D5 50293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Archos's USB Vendor ID 51293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_ARCHOS 0x0E79 5289aff1d22662c64cc2de384e7e2c699e4d1d5d47Xavier Ducrohet// Asus's USB Vendor ID 5389aff1d22662c64cc2de384e7e2c699e4d1d5d47Xavier Ducrohet#define VENDOR_ID_ASUS 0x0b05 54293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// BYD's USB Vendor ID 55293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_BYD 0x1D91 56293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Compal's USB Vendor ID 57fd18127eb7f1b900beb72be35bbe9163bf95995aherman_lin#define VENDOR_ID_COMPAL 0x04B7 58fd18127eb7f1b900beb72be35bbe9163bf95995aherman_lin// Compalcomm's USB Vendor ID 59fd18127eb7f1b900beb72be35bbe9163bf95995aherman_lin#define VENDOR_ID_COMPALCOMM 0x1219 60293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Dell's USB Vendor ID 61293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_DELL 0x413c 62293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// ECS's USB Vendor ID 63293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_ECS 0x03fc 64fdd189c64ee5afe01f11072255a44fe57b965f57DanielMo// EMERGING_TECH's USB Vendor ID 65fdd189c64ee5afe01f11072255a44fe57b965f57DanielMo#define VENDOR_ID_EMERGING_TECH 0x297F 666e39bace17ef089beb143f6324807b9d33df366cJon Sawyer// Emerson's USB Vendor ID 676e39bace17ef089beb143f6324807b9d33df366cJon Sawyer#define VENDOR_ID_EMERSON 0x2207 68293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Foxconn's USB Vendor ID 69293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_FOXCONN 0x0489 70293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Fujitsu's USB Vendor ID 71293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_FUJITSU 0x04C5 72cbe19cec6192837582906d885dafe1945d6a7f4cXavier Ducrohet// Funai's USB Vendor ID 73cbe19cec6192837582906d885dafe1945d6a7f4cXavier Ducrohet#define VENDOR_ID_FUNAI 0x0F1C 74293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Garmin-Asus's USB Vendor ID 75293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_GARMIN_ASUS 0x091E 767a5c1463ba386fd14e97c9fb4e058129763b60c1Joe Bass// Gigabyte's USB Vendor ID 777a5c1463ba386fd14e97c9fb4e058129763b60c1Joe Bass#define VENDOR_ID_GIGABYTE 0x0414 78319d8c1d1f5e11e971125bb244e9afca25bce592Volker Moesker// Gigaset's USB Vendor ID 79319d8c1d1f5e11e971125bb244e9afca25bce592Volker Moesker#define VENDOR_ID_GIGASET 0x1E85 804f8d3be3b2a78813a0769ec787a29789c27cf21exuefeng cai// GIONEE's USB Vendor ID 814f8d3be3b2a78813a0769ec787a29789c27cf21exuefeng cai#define VENDOR_ID_GIONEE 0x271D 82293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Google's USB Vendor ID 83293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_GOOGLE 0x18d1 84293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Haier's USB Vendor ID 85293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_HAIER 0x201E 86293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Harris's USB Vendor ID 87293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_HARRIS 0x19A5 88293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Hisense's USB Vendor ID 89293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_HISENSE 0x109b 908c4c8e8988411449ecb2f50c25d3e4188e81e7c0DanielMo// Honeywell's USB Vendor ID 918c4c8e8988411449ecb2f50c25d3e4188e81e7c0DanielMo#define VENDOR_ID_HONEYWELL 0x0c2e 925ff167ca1121a2d598aa7564449950076f42a5caJon Sawyer// HP's USB Vendor ID 935ff167ca1121a2d598aa7564449950076f42a5caJon Sawyer#define VENDOR_ID_HP 0x03f0 94293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// HTC's USB Vendor ID 95293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_HTC 0x0bb4 96293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Huawei's USB Vendor ID 97293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_HUAWEI 0x12D1 98293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// INQ Mobile's USB Vendor ID 99293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_INQ_MOBILE 0x2314 100293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Intel's USB Vendor ID 101293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_INTEL 0x8087 1022b6612ff96eaf4ad5debda7af5d2a9bdb04c417dDanielMo// Intermec's USB Vendor ID 1032b6612ff96eaf4ad5debda7af5d2a9bdb04c417dDanielMo#define VENDOR_ID_INTERMEC 0x067e 104292e86230ee0eabb9c9bed902bc3b3941437341dMike Lockwood// IRiver's USB Vendor ID 105292e86230ee0eabb9c9bed902bc3b3941437341dMike Lockwood#define VENDOR_ID_IRIVER 0x2420 106aa61854645ffed8595507463820e81aa0aa8f2fdMike Lockwood// K-Touch's USB Vendor ID 107aa61854645ffed8595507463820e81aa0aa8f2fdMike Lockwood#define VENDOR_ID_K_TOUCH 0x24E3 108293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// KT Tech's USB Vendor ID 109293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_KT_TECH 0x2116 110293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Kobo's USB Vendor ID 111293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_KOBO 0x2237 112293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Kyocera's USB Vendor ID 113293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_KYOCERA 0x0482 114293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Lab126's USB Vendor ID 115293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_LAB126 0x1949 116293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Lenovo's USB Vendor ID 117293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_LENOVO 0x17EF 118293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// LenovoMobile's USB Vendor ID 119293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_LENOVOMOBILE 0x2006 120293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// LG's USB Vendor ID 121293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_LGE 0x1004 122293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Lumigon's USB Vendor ID 123293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_LUMIGON 0x25E3 124293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Motorola's USB Vendor ID 125293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_MOTOROLA 0x22b8 126293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// MSI's USB Vendor ID 127293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_MSI 0x0DB0 128293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// MTK's USB Vendor ID 129293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_MTK 0x0e8d 130293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// NEC's USB Vendor ID 131293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_NEC 0x0409 132293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// B&N Nook's USB Vendor ID 133293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_NOOK 0x2080 134293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Nvidia's USB Vendor ID 135293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_NVIDIA 0x0955 136293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// OPPO's USB Vendor ID 137293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_OPPO 0x22D9 138293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// On-The-Go-Video's USB Vendor ID 139293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_OTGV 0x2257 140293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// OUYA's USB Vendor ID 141293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_OUYA 0x2836 142293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Pantech's USB Vendor ID 143293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_PANTECH 0x10A9 144aa61854645ffed8595507463820e81aa0aa8f2fdMike Lockwood// Pegatron's USB Vendor ID 145aa61854645ffed8595507463820e81aa0aa8f2fdMike Lockwood#define VENDOR_ID_PEGATRON 0x1D4D 146293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Philips's USB Vendor ID 147293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_PHILIPS 0x0471 148293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Panasonic Mobile Communication's USB Vendor ID 149293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_PMC 0x04DA 150dd52e8c57b5026f70a3ec390d2f9a7809ebd2d85Xavier Ducrohet// Positivo's USB Vendor ID 151dd52e8c57b5026f70a3ec390d2f9a7809ebd2d85Xavier Ducrohet#define VENDOR_ID_POSITIVO 0x1662 15276b526a2cad8f42717c48ad5d451dfc09d5a6d6fDanielMo// Prestigio's USB Vendor ID 15376b526a2cad8f42717c48ad5d451dfc09d5a6d6fDanielMo#define VENDOR_ID_PRESTIGIO 0x29e4 154293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Qisda's USB Vendor ID 155293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_QISDA 0x1D45 156293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Qualcomm's USB Vendor ID 157293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_QUALCOMM 0x05c6 158746f3243f6d30ab51a36dcfea76eac3ba29ac625Xavier Ducrohet// Quanta's USB Vendor ID 159746f3243f6d30ab51a36dcfea76eac3ba29ac625Xavier Ducrohet#define VENDOR_ID_QUANTA 0x0408 160d0057c006b5bdfec6e6322d2b80a985a6359d8f3DanielMo// Rockchip's USB Vendor ID 161d0057c006b5bdfec6e6322d2b80a985a6359d8f3DanielMo#define VENDOR_ID_ROCKCHIP 0x2207 162293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Samsung's USB Vendor ID 163293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_SAMSUNG 0x04e8 164293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Sharp's USB Vendor ID 165293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_SHARP 0x04dd 166293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// SK Telesys's USB Vendor ID 167293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_SK_TELESYS 0x1F53 168ae1f0094309b9bad62ff7de32820c78f66f2c07aBao Haojun// Smartisan's USB Vendor ID 169ae1f0094309b9bad62ff7de32820c78f66f2c07aBao Haojun#define VENDOR_ID_SMARTISAN 0x29a9 170746f3243f6d30ab51a36dcfea76eac3ba29ac625Xavier Ducrohet// Sony's USB Vendor ID 171746f3243f6d30ab51a36dcfea76eac3ba29ac625Xavier Ducrohet#define VENDOR_ID_SONY 0x054C 172293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Sony Ericsson's USB Vendor ID 173293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_SONY_ERICSSON 0x0FCE 174293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// T & A Mobile Phones' USB Vendor ID 175293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_T_AND_A 0x1BBB 176402c2b98889e02a9b558b02a0bc28bd85fb36b31DanielMo// TechFaith's USB Vendor ID 177402c2b98889e02a9b558b02a0bc28bd85fb36b31DanielMo#define VENDOR_ID_TECHFAITH 0x1d09 178d1e39491f063626e026304ba8abe084cc43c94daXavier Ducrohet// Teleepoch's USB Vendor ID 179d1e39491f063626e026304ba8abe084cc43c94daXavier Ducrohet#define VENDOR_ID_TELEEPOCH 0x2340 180293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Texas Instruments's USB Vendor ID 181293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_TI 0x0451 182293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Toshiba's USB Vendor ID 183293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_TOSHIBA 0x0930 18456266c75e2089500c30fcbc97f0d46df47f87f00Wing Tseng// Unowhy's USB Vendor ID 18556266c75e2089500c30fcbc97f0d46df47f87f00Wing Tseng#define VENDOR_ID_UNOWHY 0x2A49 186293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Vizio's USB Vendor ID 187293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_VIZIO 0xE040 18864a602942e159c73ceee5c584064f364137d1f47Wing Tseng// Wacom's USB Vendor ID 18964a602942e159c73ceee5c584064f364137d1f47Wing Tseng#define VENDOR_ID_WACOM 0x0531 190293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Xiaomi's USB Vendor ID 191293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_XIAOMI 0x2717 192c1b6b153dc7c535294a63a215a018d0824813757DanielMo// YotaDevices's USB Vendor ID 193c1b6b153dc7c535294a63a215a018d0824813757DanielMo#define VENDOR_ID_YOTADEVICES 0x2916 194293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// Yulong Coolpad's USB Vendor ID 195293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_YULONG_COOLPAD 0x1EBF 196293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross// ZTE's USB Vendor ID 197293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross#define VENDOR_ID_ZTE 0x19D2 198293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross/* Keep the list above sorted alphabetically by #define name */ 199293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross 200a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet/** built-in vendor list */ 201293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross/* Keep the list below sorted alphabetically */ 202a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohetint builtInVendorIds[] = { 2037953b89e8d68565d15791618146a712231683d09Robert CH Chou VENDOR_ID_ACER, 20463f0f5117bb8ca781a8d9c9a66f5cba755e6005eDanielMo VENDOR_ID_ALLWINNER, 205d5dab6d5f85e7c03f08614918088a33ce73abcf5DanielMo VENDOR_ID_AMLOGIC, 206293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_ANYDATA, 207293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_ARCHOS, 20889aff1d22662c64cc2de384e7e2c699e4d1d5d47Xavier Ducrohet VENDOR_ID_ASUS, 209293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_BYD, 210293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_COMPAL, 211fd18127eb7f1b900beb72be35bbe9163bf95995aherman_lin VENDOR_ID_COMPALCOMM, 212293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_DELL, 213293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_ECS, 214fdd189c64ee5afe01f11072255a44fe57b965f57DanielMo VENDOR_ID_EMERGING_TECH, 2156e39bace17ef089beb143f6324807b9d33df366cJon Sawyer VENDOR_ID_EMERSON, 216293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_FOXCONN, 217293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_FUJITSU, 218cbe19cec6192837582906d885dafe1945d6a7f4cXavier Ducrohet VENDOR_ID_FUNAI, 219293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_GARMIN_ASUS, 2207a5c1463ba386fd14e97c9fb4e058129763b60c1Joe Bass VENDOR_ID_GIGABYTE, 221319d8c1d1f5e11e971125bb244e9afca25bce592Volker Moesker VENDOR_ID_GIGASET, 2224f8d3be3b2a78813a0769ec787a29789c27cf21exuefeng cai VENDOR_ID_GIONEE, 223293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_GOOGLE, 224293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_HAIER, 225293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_HARRIS, 226293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_HISENSE, 2278c4c8e8988411449ecb2f50c25d3e4188e81e7c0DanielMo VENDOR_ID_HONEYWELL, 2285ff167ca1121a2d598aa7564449950076f42a5caJon Sawyer VENDOR_ID_HP, 229293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_HTC, 230293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_HUAWEI, 231293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_INQ_MOBILE, 232293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_INTEL, 2332b6612ff96eaf4ad5debda7af5d2a9bdb04c417dDanielMo VENDOR_ID_INTERMEC, 234292e86230ee0eabb9c9bed902bc3b3941437341dMike Lockwood VENDOR_ID_IRIVER, 235293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_KOBO, 236aa61854645ffed8595507463820e81aa0aa8f2fdMike Lockwood VENDOR_ID_K_TOUCH, 237293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_KT_TECH, 238293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_KYOCERA, 239293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_LAB126, 240293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_LENOVO, 241293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_LENOVOMOBILE, 242293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_LGE, 243293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_LUMIGON, 244293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_MOTOROLA, 245293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_MSI, 246293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_MTK, 247293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_NEC, 248293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_NOOK, 249293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_NVIDIA, 250293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_OPPO, 251293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_OTGV, 252293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_OUYA, 253293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_PANTECH, 254aa61854645ffed8595507463820e81aa0aa8f2fdMike Lockwood VENDOR_ID_PEGATRON, 255293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_PHILIPS, 256293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_PMC, 257dd52e8c57b5026f70a3ec390d2f9a7809ebd2d85Xavier Ducrohet VENDOR_ID_POSITIVO, 25876b526a2cad8f42717c48ad5d451dfc09d5a6d6fDanielMo VENDOR_ID_PRESTIGIO, 259293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_QISDA, 260293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_QUALCOMM, 261746f3243f6d30ab51a36dcfea76eac3ba29ac625Xavier Ducrohet VENDOR_ID_QUANTA, 262d0057c006b5bdfec6e6322d2b80a985a6359d8f3DanielMo VENDOR_ID_ROCKCHIP, 263293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_SAMSUNG, 264293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_SHARP, 265293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_SK_TELESYS, 266ae1f0094309b9bad62ff7de32820c78f66f2c07aBao Haojun VENDOR_ID_SMARTISAN, 267746f3243f6d30ab51a36dcfea76eac3ba29ac625Xavier Ducrohet VENDOR_ID_SONY, 268293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_SONY_ERICSSON, 269293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_T_AND_A, 270402c2b98889e02a9b558b02a0bc28bd85fb36b31DanielMo VENDOR_ID_TECHFAITH, 271d1e39491f063626e026304ba8abe084cc43c94daXavier Ducrohet VENDOR_ID_TELEEPOCH, 272293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_TI, 273293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_TOSHIBA, 27456266c75e2089500c30fcbc97f0d46df47f87f00Wing Tseng VENDOR_ID_UNOWHY, 275293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_VIZIO, 27664a602942e159c73ceee5c584064f364137d1f47Wing Tseng VENDOR_ID_WACOM, 277293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_XIAOMI, 278c1b6b153dc7c535294a63a215a018d0824813757DanielMo VENDOR_ID_YOTADEVICES, 279293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_YULONG_COOLPAD, 280293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross VENDOR_ID_ZTE, 281a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet}; 282293717c364f325c1b60a28fa5913cec0a99ba03dColin Cross/* Keep the list above sorted alphabetically */ 283a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 284a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#define BUILT_IN_VENDOR_COUNT (sizeof(builtInVendorIds)/sizeof(builtInVendorIds[0])) 285a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 286a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet/* max number of supported vendor ids (built-in + 3rd party). increase as needed */ 287a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#define VENDOR_COUNT_MAX 128 288a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 289a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohetint vendorIds[VENDOR_COUNT_MAX]; 290a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohetunsigned vendorIdCount = 0; 291a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet 292a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohetint get_adb_usb_ini(char* buff, size_t len); 293a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 294a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohetvoid usb_vendors_init(void) 295a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet{ 296a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (VENDOR_COUNT_MAX < BUILT_IN_VENDOR_COUNT) { 297a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet fprintf(stderr, "VENDOR_COUNT_MAX not big enough for built-in vendor list.\n"); 298a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet exit(2); 299a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } 300a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 301a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet /* add the built-in vendors at the beginning of the array */ 302a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet memcpy(vendorIds, builtInVendorIds, sizeof(builtInVendorIds)); 303a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 304a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet /* default array size is the number of built-in vendors */ 305a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet vendorIdCount = BUILT_IN_VENDOR_COUNT; 306a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 307a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (VENDOR_COUNT_MAX == BUILT_IN_VENDOR_COUNT) 308a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet return; 309a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 310a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet char temp[PATH_MAX]; 311a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (get_adb_usb_ini(temp, sizeof(temp)) == 0) { 312a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet FILE * f = fopen(temp, "rt"); 313a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 314a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (f != NULL) { 315a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet /* The vendor id file is pretty basic. 1 vendor id per line. 316a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet Lines starting with # are comments */ 317a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet while (fgets(temp, sizeof(temp), f) != NULL) { 318a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (temp[0] == '#') 319a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet continue; 320a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 321a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet long value = strtol(temp, NULL, 0); 322a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (errno == EINVAL || errno == ERANGE || value > INT_MAX || value < 0) { 323a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet fprintf(stderr, "Invalid content in %s. Quitting.\n", ANDROID_ADB_INI); 324a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet exit(2); 325a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } 326a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 327a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet vendorIds[vendorIdCount++] = (int)value; 328a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 329a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet /* make sure we don't go beyond the array */ 330a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (vendorIdCount == VENDOR_COUNT_MAX) { 331a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet break; 332a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } 333a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } 33460529e39bb5d5c1a797394fe78201c0454080ee4Chris Dearman fclose(f); 335a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } 336a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } 337a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet} 338a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet 339a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet/* Utils methods */ 340a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 341a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet/* builds the path to the adb vendor id file. returns 0 if success */ 342a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohetint build_path(char* buff, size_t len, const char* format, const char* home) 343a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet{ 344eb558b9240743e24c87796191f54c99890641b14Michael Richardson if (snprintf(buff, len, format, home, ANDROID_PATH, ANDROID_ADB_INI) >= (signed)len) { 345a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet return 1; 346a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } 347a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 348a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet return 0; 349a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet} 350a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 351a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet/* fills buff with the path to the adb vendor id file. returns 0 if success */ 352a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohetint get_adb_usb_ini(char* buff, size_t len) 353a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet{ 354a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#ifdef _WIN32 355a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet const char* home = getenv("ANDROID_SDK_HOME"); 356a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (home != NULL) { 357a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet return build_path(buff, len, "%s\\%s\\%s", home); 358a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } else { 359a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet char path[MAX_PATH]; 360a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet SHGetFolderPath( NULL, CSIDL_PROFILE, NULL, 0, path); 361a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet return build_path(buff, len, "%s\\%s\\%s", path); 362a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet } 363a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#else 364a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet const char* home = getenv("HOME"); 365a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (home == NULL) 366a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet home = "/tmp"; 367a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 368a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet return build_path(buff, len, "%s/%s/%s", home); 369a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#endif 370a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet} 371