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> 20a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 21a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#ifdef _WIN32 22a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet# define WIN32_LEAN_AND_MEAN 23a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet# include "windows.h" 24a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet# include "shlobj.h" 25a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#else 26a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet# include <unistd.h> 27a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet# include <sys/stat.h> 28a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#endif 29a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 30a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#include "sysdeps.h" 31a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet#include "adb.h" 32a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet 33a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#define ANDROID_PATH ".android" 34a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#define ANDROID_ADB_INI "adb_usb.ini" 35a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 36a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#define TRACE_TAG TRACE_USB 37a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 38a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet// Google's USB Vendor ID 39a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#define VENDOR_ID_GOOGLE 0x18d1 40f60e8638282d66c108f1e1dea030856312f65892Wu, Hao// Intel's USB Vendor ID 41f60e8638282d66c108f1e1dea030856312f65892Wu, Hao#define VENDOR_ID_INTEL 0x8087 42a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet// HTC's USB Vendor ID 43a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#define VENDOR_ID_HTC 0x0bb4 44de6f62a609120c3d9e4e53689c3b309842ec874bXavier Ducrohet// Samsung's USB Vendor ID 45de6f62a609120c3d9e4e53689c3b309842ec874bXavier Ducrohet#define VENDOR_ID_SAMSUNG 0x04e8 46de6f62a609120c3d9e4e53689c3b309842ec874bXavier Ducrohet// Motorola's USB Vendor ID 47de6f62a609120c3d9e4e53689c3b309842ec874bXavier Ducrohet#define VENDOR_ID_MOTOROLA 0x22b8 486ae9256322053354c7d2badccc0ce5c24b37c243Mike Lockwood// LG's USB Vendor ID 496ae9256322053354c7d2badccc0ce5c24b37c243Mike Lockwood#define VENDOR_ID_LGE 0x1004 506ae9256322053354c7d2badccc0ce5c24b37c243Mike Lockwood// Huawei's USB Vendor ID 516ae9256322053354c7d2badccc0ce5c24b37c243Mike Lockwood#define VENDOR_ID_HUAWEI 0x12D1 527953b89e8d68565d15791618146a712231683d09Robert CH Chou// Acer's USB Vendor ID 537953b89e8d68565d15791618146a712231683d09Robert CH Chou#define VENDOR_ID_ACER 0x0502 5423433b93d1acb01650c9480d9bb5d5d869ba4f79Xavier Ducrohet// Sony Ericsson's USB Vendor ID 5523433b93d1acb01650c9480d9bb5d5d869ba4f79Xavier Ducrohet#define VENDOR_ID_SONY_ERICSSON 0x0FCE 566170404867631317ab57c67bf074494e6e775556Mike Lockwood// Foxconn's USB Vendor ID 576170404867631317ab57c67bf074494e6e775556Mike Lockwood#define VENDOR_ID_FOXCONN 0x0489 5837ddce736ce7700ee1e120f7371e6ee6a526f3caMike Lockwood// Dell's USB Vendor ID 5937ddce736ce7700ee1e120f7371e6ee6a526f3caMike Lockwood#define VENDOR_ID_DELL 0x413c 606ac5e192997478ae166981ddf66136c865d21a40Erik Gilling// Nvidia's USB Vendor ID 616ac5e192997478ae166981ddf66136c865d21a40Erik Gilling#define VENDOR_ID_NVIDIA 0x0955 621873adc2b12d5a9045bae90650bb331c7c7aa3c7Raphael// Garmin-Asus's USB Vendor ID 631873adc2b12d5a9045bae90650bb331c7c7aa3c7Raphael#define VENDOR_ID_GARMIN_ASUS 0x091E 64123331adeaed6c54e4869b0fd7001c5f1b19bdc4Takeshi Kishimoto// Sharp's USB Vendor ID 65123331adeaed6c54e4869b0fd7001c5f1b19bdc4Takeshi Kishimoto#define VENDOR_ID_SHARP 0x04dd 6601512aa3b0e3709e97054ffd1ff265a2d4193646Takeshi Kishimoto// ZTE's USB Vendor ID 6701512aa3b0e3709e97054ffd1ff265a2d4193646Takeshi Kishimoto#define VENDOR_ID_ZTE 0x19D2 688d2f91db21271a253bfe1bbe7716ff59e88572bdTakeshi Kishimoto// Kyocera's USB Vendor ID 698d2f91db21271a253bfe1bbe7716ff59e88572bdTakeshi Kishimoto#define VENDOR_ID_KYOCERA 0x0482 707c19bbe086b3cd81499829c0a79ed0ed0ae4fb16Xavier Ducrohet// Pantech's USB Vendor ID 717c19bbe086b3cd81499829c0a79ed0ed0ae4fb16Xavier Ducrohet#define VENDOR_ID_PANTECH 0x10A9 727f2ad58a6d9cb70da934825a7648a5d3f8cbc498Dima Zavin// Qualcomm's USB Vendor ID 737f2ad58a6d9cb70da934825a7648a5d3f8cbc498Dima Zavin#define VENDOR_ID_QUALCOMM 0x05c6 7483cb93b4016cbd6029a2d215a7b63fa716b103e4Michael Richardson// On-The-Go-Video's USB Vendor ID 7583cb93b4016cbd6029a2d215a7b63fa716b103e4Michael Richardson#define VENDOR_ID_OTGV 0x2257 762124afeee1f19423e71c52ede6f4926f5389e917Takeshi Kishimoto// NEC's USB Vendor ID 772124afeee1f19423e71c52ede6f4926f5389e917Takeshi Kishimoto#define VENDOR_ID_NEC 0x0409 782124afeee1f19423e71c52ede6f4926f5389e917Takeshi Kishimoto// Panasonic Mobile Communication's USB Vendor ID 792124afeee1f19423e71c52ede6f4926f5389e917Takeshi Kishimoto#define VENDOR_ID_PMC 0x04DA 8029837f94b56c3eeaf39f447507324ecdb207ba96Takeshi Kishimoto// Toshiba's USB Vendor ID 8129837f94b56c3eeaf39f447507324ecdb207ba96Takeshi Kishimoto#define VENDOR_ID_TOSHIBA 0x0930 82f62b23f2c1540221621024c850fdf615dda0c903Xavier Ducrohet// SK Telesys's USB Vendor ID 83f62b23f2c1540221621024c850fdf615dda0c903Xavier Ducrohet#define VENDOR_ID_SK_TELESYS 0x1F53 84f62b23f2c1540221621024c850fdf615dda0c903Xavier Ducrohet// KT Tech's USB Vendor ID 856c2636947c43c2950488d8d82bfc691cb907518dXavier Ducrohet#define VENDOR_ID_KT_TECH 0x2116 8689aff1d22662c64cc2de384e7e2c699e4d1d5d47Xavier Ducrohet// Asus's USB Vendor ID 8789aff1d22662c64cc2de384e7e2c699e4d1d5d47Xavier Ducrohet#define VENDOR_ID_ASUS 0x0b05 88d02e521d79a49471b3f1dc3717e842948df64789Mike Lockwood// Philips's USB Vendor ID 89d02e521d79a49471b3f1dc3717e842948df64789Mike Lockwood#define VENDOR_ID_PHILIPS 0x0471 901d3fbed34897e36ed0b55c68fe6b0a7f2dd2ec8eAlex Sakhartchouk// Texas Instruments's USB Vendor ID 911d3fbed34897e36ed0b55c68fe6b0a7f2dd2ec8eAlex Sakhartchouk#define VENDOR_ID_TI 0x0451 92cbe19cec6192837582906d885dafe1945d6a7f4cXavier Ducrohet// Funai's USB Vendor ID 93cbe19cec6192837582906d885dafe1945d6a7f4cXavier Ducrohet#define VENDOR_ID_FUNAI 0x0F1C 947a5c1463ba386fd14e97c9fb4e058129763b60c1Joe Bass// Gigabyte's USB Vendor ID 957a5c1463ba386fd14e97c9fb4e058129763b60c1Joe Bass#define VENDOR_ID_GIGABYTE 0x0414 96292e86230ee0eabb9c9bed902bc3b3941437341dMike Lockwood// IRiver's USB Vendor ID 97292e86230ee0eabb9c9bed902bc3b3941437341dMike Lockwood#define VENDOR_ID_IRIVER 0x2420 98292e86230ee0eabb9c9bed902bc3b3941437341dMike Lockwood// Compal's USB Vendor ID 99292e86230ee0eabb9c9bed902bc3b3941437341dMike Lockwood#define VENDOR_ID_COMPAL 0x1219 100292e86230ee0eabb9c9bed902bc3b3941437341dMike Lockwood// T & A Mobile Phones' USB Vendor ID 101292e86230ee0eabb9c9bed902bc3b3941437341dMike Lockwood#define VENDOR_ID_T_AND_A 0x1BBB 102c11f99f40a200f5cdb4bdaedc18fddbc4324189czhangclb// LenovoMobile's USB Vendor ID 103dd52e8c57b5026f70a3ec390d2f9a7809ebd2d85Xavier Ducrohet#define VENDOR_ID_LENOVOMOBILE 0x2006 1047c17d0932c676d75ac0ff42b1917a02127ee554eMike Lockwood// Lenovo's USB Vendor ID 105c11f99f40a200f5cdb4bdaedc18fddbc4324189czhangclb#define VENDOR_ID_LENOVO 0x17EF 106fb34e98bdd36717a1df5a2be4de288c5e08c9b78Mike Lockwood// Vizio's USB Vendor ID 107fb34e98bdd36717a1df5a2be4de288c5e08c9b78Mike Lockwood#define VENDOR_ID_VIZIO 0xE040 108aa61854645ffed8595507463820e81aa0aa8f2fdMike Lockwood// K-Touch's USB Vendor ID 109aa61854645ffed8595507463820e81aa0aa8f2fdMike Lockwood#define VENDOR_ID_K_TOUCH 0x24E3 110aa61854645ffed8595507463820e81aa0aa8f2fdMike Lockwood// Pegatron's USB Vendor ID 111aa61854645ffed8595507463820e81aa0aa8f2fdMike Lockwood#define VENDOR_ID_PEGATRON 0x1D4D 112aa61854645ffed8595507463820e81aa0aa8f2fdMike Lockwood// Archos's USB Vendor ID 113aa61854645ffed8595507463820e81aa0aa8f2fdMike Lockwood#define VENDOR_ID_ARCHOS 0x0E79 114dd52e8c57b5026f70a3ec390d2f9a7809ebd2d85Xavier Ducrohet// Positivo's USB Vendor ID 115dd52e8c57b5026f70a3ec390d2f9a7809ebd2d85Xavier Ducrohet#define VENDOR_ID_POSITIVO 0x1662 11607ad9f2a127b2836c7d45a503a5f3ef7517218f3Xavier Ducrohet// Fujitsu's USB Vendor ID 11707ad9f2a127b2836c7d45a503a5f3ef7517218f3Xavier Ducrohet#define VENDOR_ID_FUJITSU 0x04C5 11807ad9f2a127b2836c7d45a503a5f3ef7517218f3Xavier Ducrohet// Lumigon's USB Vendor ID 11907ad9f2a127b2836c7d45a503a5f3ef7517218f3Xavier Ducrohet#define VENDOR_ID_LUMIGON 0x25E3 120746f3243f6d30ab51a36dcfea76eac3ba29ac625Xavier Ducrohet// Quanta's USB Vendor ID 121746f3243f6d30ab51a36dcfea76eac3ba29ac625Xavier Ducrohet#define VENDOR_ID_QUANTA 0x0408 122746f3243f6d30ab51a36dcfea76eac3ba29ac625Xavier Ducrohet// INQ Mobile's USB Vendor ID 123746f3243f6d30ab51a36dcfea76eac3ba29ac625Xavier Ducrohet#define VENDOR_ID_INQ_MOBILE 0x2314 124746f3243f6d30ab51a36dcfea76eac3ba29ac625Xavier Ducrohet// Sony's USB Vendor ID 125746f3243f6d30ab51a36dcfea76eac3ba29ac625Xavier Ducrohet#define VENDOR_ID_SONY 0x054C 126775ab9c99eb513efecb6390b58bbcec80555eef8Jon Sawyer// Lab126's USB Vendor ID 127775ab9c99eb513efecb6390b58bbcec80555eef8Jon Sawyer#define VENDOR_ID_LAB126 0x1949 128246808bedfb35ce8abd6cee434ff5b07a6618e8aXavier Ducrohet// Yulong Coolpad's USB Vendor ID 129246808bedfb35ce8abd6cee434ff5b07a6618e8aXavier Ducrohet#define VENDOR_ID_YULONG_COOLPAD 0x1EBF 130f53aff69487f2c36f0fa28ed8ce46ee53db662a5Dan Zhang// Kobo's USB Vendor ID 131f53aff69487f2c36f0fa28ed8ce46ee53db662a5Dan Zhang#define VENDOR_ID_KOBO 0x2237 132d1e39491f063626e026304ba8abe084cc43c94daXavier Ducrohet// Teleepoch's USB Vendor ID 133d1e39491f063626e026304ba8abe084cc43c94daXavier Ducrohet#define VENDOR_ID_TELEEPOCH 0x2340 134df6d7666fd44e9903944202bcb4a8da6e8064a1dSam Lin// AnyDATA's USB Vendor ID 135df6d7666fd44e9903944202bcb4a8da6e8064a1dSam Lin#define VENDOR_ID_ANYDATA 0x16D5 136df6d7666fd44e9903944202bcb4a8da6e8064a1dSam Lin// Harris's USB Vendor ID 137df6d7666fd44e9903944202bcb4a8da6e8064a1dSam Lin#define VENDOR_ID_HARRIS 0x19A5 138df6d7666fd44e9903944202bcb4a8da6e8064a1dSam Lin// OPPO's USB Vendor ID 139df6d7666fd44e9903944202bcb4a8da6e8064a1dSam Lin#define VENDOR_ID_OPPO 0x22D9 140d3b69404a1497cef235574a97e45867686f4c155Gary Hua// Xiaomi's USB Vendor ID 141d3b69404a1497cef235574a97e45867686f4c155Gary Hua#define VENDOR_ID_XIAOMI 0x2717 14292eb5838336d52b415472a9a9df703a99328b194sunxiaoqi// BYD's USB Vendor ID 14392eb5838336d52b415472a9a9df703a99328b194sunxiaoqi#define VENDOR_ID_BYD 0x19D1 14421ec0516cf0fb6b5a849ca8f47258554a99e386cAl Sutton// OUYA's USB Vendor ID 14521ec0516cf0fb6b5a849ca8f47258554a99e386cAl Sutton#define VENDOR_ID_OUYA 0x2836 14671150ce4efdaba3d60cb39ed085b3476969ab95eJeff Smith// Haier's USB Vendor ID 14771150ce4efdaba3d60cb39ed085b3476969ab95eJeff Smith#define VENDOR_ID_HAIER 0x201E 14871150ce4efdaba3d60cb39ed085b3476969ab95eJeff Smith// Hisense's USB Vendor ID 14971150ce4efdaba3d60cb39ed085b3476969ab95eJeff Smith#define VENDOR_ID_HISENSE 0x109b 15071150ce4efdaba3d60cb39ed085b3476969ab95eJeff Smith// MTK's USB Vendor ID 15171150ce4efdaba3d60cb39ed085b3476969ab95eJeff Smith#define VENDOR_ID_MTK 0x0e8d 15271150ce4efdaba3d60cb39ed085b3476969ab95eJeff Smith// B&N Nook's USB Vendor ID 15371150ce4efdaba3d60cb39ed085b3476969ab95eJeff Smith#define VENDOR_ID_NOOK 0x2080 154001fe87e0228b72bc0c048ecd92f31be023b72e5esther// Qisda's USB Vendor ID 155001fe87e0228b72bc0c048ecd92f31be023b72e5esther#define VENDOR_ID_QISDA 0x1D45 156cae8b9df5c9368cabda380d82f9b6c4903e1e2e5ecsgms// ECS's USB Vendor ID 157cae8b9df5c9368cabda380d82f9b6c4903e1e2e5ecsgms#define VENDOR_ID_ECS 0x03fc 158d1e39491f063626e026304ba8abe084cc43c94daXavier Ducrohet 159a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 160a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet/** built-in vendor list */ 161a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohetint builtInVendorIds[] = { 162a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet VENDOR_ID_GOOGLE, 163f60e8638282d66c108f1e1dea030856312f65892Wu, Hao VENDOR_ID_INTEL, 164a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet VENDOR_ID_HTC, 165de6f62a609120c3d9e4e53689c3b309842ec874bXavier Ducrohet VENDOR_ID_SAMSUNG, 166de6f62a609120c3d9e4e53689c3b309842ec874bXavier Ducrohet VENDOR_ID_MOTOROLA, 1676ae9256322053354c7d2badccc0ce5c24b37c243Mike Lockwood VENDOR_ID_LGE, 1686ae9256322053354c7d2badccc0ce5c24b37c243Mike Lockwood VENDOR_ID_HUAWEI, 1697953b89e8d68565d15791618146a712231683d09Robert CH Chou VENDOR_ID_ACER, 17023433b93d1acb01650c9480d9bb5d5d869ba4f79Xavier Ducrohet VENDOR_ID_SONY_ERICSSON, 1716170404867631317ab57c67bf074494e6e775556Mike Lockwood VENDOR_ID_FOXCONN, 17237ddce736ce7700ee1e120f7371e6ee6a526f3caMike Lockwood VENDOR_ID_DELL, 1736ac5e192997478ae166981ddf66136c865d21a40Erik Gilling VENDOR_ID_NVIDIA, 1741873adc2b12d5a9045bae90650bb331c7c7aa3c7Raphael VENDOR_ID_GARMIN_ASUS, 175123331adeaed6c54e4869b0fd7001c5f1b19bdc4Takeshi Kishimoto VENDOR_ID_SHARP, 17601512aa3b0e3709e97054ffd1ff265a2d4193646Takeshi Kishimoto VENDOR_ID_ZTE, 1778d2f91db21271a253bfe1bbe7716ff59e88572bdTakeshi Kishimoto VENDOR_ID_KYOCERA, 1787c19bbe086b3cd81499829c0a79ed0ed0ae4fb16Xavier Ducrohet VENDOR_ID_PANTECH, 1797f2ad58a6d9cb70da934825a7648a5d3f8cbc498Dima Zavin VENDOR_ID_QUALCOMM, 18083cb93b4016cbd6029a2d215a7b63fa716b103e4Michael Richardson VENDOR_ID_OTGV, 1812124afeee1f19423e71c52ede6f4926f5389e917Takeshi Kishimoto VENDOR_ID_NEC, 1822124afeee1f19423e71c52ede6f4926f5389e917Takeshi Kishimoto VENDOR_ID_PMC, 18329837f94b56c3eeaf39f447507324ecdb207ba96Takeshi Kishimoto VENDOR_ID_TOSHIBA, 184f62b23f2c1540221621024c850fdf615dda0c903Xavier Ducrohet VENDOR_ID_SK_TELESYS, 185f62b23f2c1540221621024c850fdf615dda0c903Xavier Ducrohet VENDOR_ID_KT_TECH, 18689aff1d22662c64cc2de384e7e2c699e4d1d5d47Xavier Ducrohet VENDOR_ID_ASUS, 187d02e521d79a49471b3f1dc3717e842948df64789Mike Lockwood VENDOR_ID_PHILIPS, 1881d3fbed34897e36ed0b55c68fe6b0a7f2dd2ec8eAlex Sakhartchouk VENDOR_ID_TI, 189cbe19cec6192837582906d885dafe1945d6a7f4cXavier Ducrohet VENDOR_ID_FUNAI, 1907a5c1463ba386fd14e97c9fb4e058129763b60c1Joe Bass VENDOR_ID_GIGABYTE, 191292e86230ee0eabb9c9bed902bc3b3941437341dMike Lockwood VENDOR_ID_IRIVER, 192292e86230ee0eabb9c9bed902bc3b3941437341dMike Lockwood VENDOR_ID_COMPAL, 193292e86230ee0eabb9c9bed902bc3b3941437341dMike Lockwood VENDOR_ID_T_AND_A, 194c11f99f40a200f5cdb4bdaedc18fddbc4324189czhangclb VENDOR_ID_LENOVOMOBILE, 1957c17d0932c676d75ac0ff42b1917a02127ee554eMike Lockwood VENDOR_ID_LENOVO, 196fb34e98bdd36717a1df5a2be4de288c5e08c9b78Mike Lockwood VENDOR_ID_VIZIO, 197aa61854645ffed8595507463820e81aa0aa8f2fdMike Lockwood VENDOR_ID_K_TOUCH, 198aa61854645ffed8595507463820e81aa0aa8f2fdMike Lockwood VENDOR_ID_PEGATRON, 199aa61854645ffed8595507463820e81aa0aa8f2fdMike Lockwood VENDOR_ID_ARCHOS, 200dd52e8c57b5026f70a3ec390d2f9a7809ebd2d85Xavier Ducrohet VENDOR_ID_POSITIVO, 20107ad9f2a127b2836c7d45a503a5f3ef7517218f3Xavier Ducrohet VENDOR_ID_FUJITSU, 20207ad9f2a127b2836c7d45a503a5f3ef7517218f3Xavier Ducrohet VENDOR_ID_LUMIGON, 203746f3243f6d30ab51a36dcfea76eac3ba29ac625Xavier Ducrohet VENDOR_ID_QUANTA, 204746f3243f6d30ab51a36dcfea76eac3ba29ac625Xavier Ducrohet VENDOR_ID_INQ_MOBILE, 205746f3243f6d30ab51a36dcfea76eac3ba29ac625Xavier Ducrohet VENDOR_ID_SONY, 206775ab9c99eb513efecb6390b58bbcec80555eef8Jon Sawyer VENDOR_ID_LAB126, 207246808bedfb35ce8abd6cee434ff5b07a6618e8aXavier Ducrohet VENDOR_ID_YULONG_COOLPAD, 208f53aff69487f2c36f0fa28ed8ce46ee53db662a5Dan Zhang VENDOR_ID_KOBO, 209d1e39491f063626e026304ba8abe084cc43c94daXavier Ducrohet VENDOR_ID_TELEEPOCH, 210df6d7666fd44e9903944202bcb4a8da6e8064a1dSam Lin VENDOR_ID_ANYDATA, 211df6d7666fd44e9903944202bcb4a8da6e8064a1dSam Lin VENDOR_ID_HARRIS, 212df6d7666fd44e9903944202bcb4a8da6e8064a1dSam Lin VENDOR_ID_OPPO, 213d3b69404a1497cef235574a97e45867686f4c155Gary Hua VENDOR_ID_XIAOMI, 21492eb5838336d52b415472a9a9df703a99328b194sunxiaoqi VENDOR_ID_BYD, 21521ec0516cf0fb6b5a849ca8f47258554a99e386cAl Sutton VENDOR_ID_OUYA, 21671150ce4efdaba3d60cb39ed085b3476969ab95eJeff Smith VENDOR_ID_HAIER, 21771150ce4efdaba3d60cb39ed085b3476969ab95eJeff Smith VENDOR_ID_HISENSE, 21871150ce4efdaba3d60cb39ed085b3476969ab95eJeff Smith VENDOR_ID_MTK, 21971150ce4efdaba3d60cb39ed085b3476969ab95eJeff Smith VENDOR_ID_NOOK, 220001fe87e0228b72bc0c048ecd92f31be023b72e5esther VENDOR_ID_QISDA, 221cae8b9df5c9368cabda380d82f9b6c4903e1e2e5ecsgms VENDOR_ID_ECS, 222a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet}; 223a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 224a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#define BUILT_IN_VENDOR_COUNT (sizeof(builtInVendorIds)/sizeof(builtInVendorIds[0])) 225a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 226a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet/* max number of supported vendor ids (built-in + 3rd party). increase as needed */ 227a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#define VENDOR_COUNT_MAX 128 228a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 229a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohetint vendorIds[VENDOR_COUNT_MAX]; 230a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohetunsigned vendorIdCount = 0; 231a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet 232a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohetint get_adb_usb_ini(char* buff, size_t len); 233a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 234a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohetvoid usb_vendors_init(void) 235a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet{ 236a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (VENDOR_COUNT_MAX < BUILT_IN_VENDOR_COUNT) { 237a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet fprintf(stderr, "VENDOR_COUNT_MAX not big enough for built-in vendor list.\n"); 238a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet exit(2); 239a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } 240a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 241a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet /* add the built-in vendors at the beginning of the array */ 242a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet memcpy(vendorIds, builtInVendorIds, sizeof(builtInVendorIds)); 243a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 244a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet /* default array size is the number of built-in vendors */ 245a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet vendorIdCount = BUILT_IN_VENDOR_COUNT; 246a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 247a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (VENDOR_COUNT_MAX == BUILT_IN_VENDOR_COUNT) 248a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet return; 249a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 250a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet char temp[PATH_MAX]; 251a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (get_adb_usb_ini(temp, sizeof(temp)) == 0) { 252a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet FILE * f = fopen(temp, "rt"); 253a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 254a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (f != NULL) { 255a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet /* The vendor id file is pretty basic. 1 vendor id per line. 256a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet Lines starting with # are comments */ 257a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet while (fgets(temp, sizeof(temp), f) != NULL) { 258a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (temp[0] == '#') 259a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet continue; 260a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 261a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet long value = strtol(temp, NULL, 0); 262a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (errno == EINVAL || errno == ERANGE || value > INT_MAX || value < 0) { 263a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet fprintf(stderr, "Invalid content in %s. Quitting.\n", ANDROID_ADB_INI); 264a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet exit(2); 265a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } 266a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 267a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet vendorIds[vendorIdCount++] = (int)value; 268a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 269a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet /* make sure we don't go beyond the array */ 270a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (vendorIdCount == VENDOR_COUNT_MAX) { 271a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet break; 272a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } 273a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } 27460529e39bb5d5c1a797394fe78201c0454080ee4Chris Dearman fclose(f); 275a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } 276a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } 277a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet} 278a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet 279a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet/* Utils methods */ 280a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 281a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet/* builds the path to the adb vendor id file. returns 0 if success */ 282a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohetint build_path(char* buff, size_t len, const char* format, const char* home) 283a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet{ 284eb558b9240743e24c87796191f54c99890641b14Michael Richardson if (snprintf(buff, len, format, home, ANDROID_PATH, ANDROID_ADB_INI) >= (signed)len) { 285a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet return 1; 286a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } 287a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 288a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet return 0; 289a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet} 290a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 291a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet/* fills buff with the path to the adb vendor id file. returns 0 if success */ 292a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohetint get_adb_usb_ini(char* buff, size_t len) 293a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet{ 294a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#ifdef _WIN32 295a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet const char* home = getenv("ANDROID_SDK_HOME"); 296a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (home != NULL) { 297a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet return build_path(buff, len, "%s\\%s\\%s", home); 298a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet } else { 299a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet char path[MAX_PATH]; 300a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet SHGetFolderPath( NULL, CSIDL_PROFILE, NULL, 0, path); 301a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet return build_path(buff, len, "%s\\%s\\%s", path); 302a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet } 303a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#else 304a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet const char* home = getenv("HOME"); 305a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet if (home == NULL) 306a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet home = "/tmp"; 307a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet 308a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet return build_path(buff, len, "%s/%s/%s", home); 309a481d096feba7cf6e61d54e416a68e2d46498df1Xavier Ducrohet#endif 310a09fbd164d2e088bc5433d310e25640ae048d47dXavier Ducrohet} 311