jiangdongguo
7 years ago
commit
c1ddd61e9b
125 changed files with 6727 additions and 0 deletions
@ -0,0 +1 @@ |
|||
#Fri Sep 29 14:50:34 CST 2017 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,22 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="CompilerConfiguration"> |
|||
<resourceExtensions /> |
|||
<wildcardResourcePatterns> |
|||
<entry name="!?*.java" /> |
|||
<entry name="!?*.form" /> |
|||
<entry name="!?*.class" /> |
|||
<entry name="!?*.groovy" /> |
|||
<entry name="!?*.scala" /> |
|||
<entry name="!?*.flex" /> |
|||
<entry name="!?*.kt" /> |
|||
<entry name="!?*.clj" /> |
|||
<entry name="!?*.aj" /> |
|||
</wildcardResourcePatterns> |
|||
<annotationProcessing> |
|||
<profile default="true" name="Default" enabled="false"> |
|||
<processorPath useClasspath="true" /> |
|||
</profile> |
|||
</annotationProcessing> |
|||
</component> |
|||
</project> |
@ -0,0 +1,3 @@ |
|||
<component name="CopyrightManager"> |
|||
<settings default="" /> |
|||
</component> |
@ -0,0 +1,20 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="GradleSettings"> |
|||
<option name="linkedExternalProjectsSettings"> |
|||
<GradleProjectSettings> |
|||
<option name="distributionType" value="LOCAL" /> |
|||
<option name="externalProjectPath" value="$PROJECT_DIR$" /> |
|||
<option name="gradleHome" value="$APPLICATION_HOME_DIR$/gradle/gradle-3.3" /> |
|||
<option name="modules"> |
|||
<set> |
|||
<option value="$PROJECT_DIR$" /> |
|||
<option value="$PROJECT_DIR$/app" /> |
|||
<option value="$PROJECT_DIR$/libusbcamera" /> |
|||
</set> |
|||
</option> |
|||
<option name="resolveModulePerSourceSet" value="false" /> |
|||
</GradleProjectSettings> |
|||
</option> |
|||
</component> |
|||
</project> |
@ -0,0 +1,13 @@ |
|||
<component name="libraryTable"> |
|||
<library name="animated-vector-drawable-25.3.1"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/17dbf24c311d327da7565d7b9b8c7205d2b3f2c6/output/jars/classes.jar!/" /> |
|||
<root url="file://$USER_HOME$/.android/build-cache/17dbf24c311d327da7565d7b9b8c7205d2b3f2c6/output/res" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/animated-vector-drawable/25.3.1/animated-vector-drawable-25.3.1-sources.jar!/" /> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/animated-vector-drawable/25.3.1/animated-vector-drawable-25.3.1-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,17 @@ |
|||
<component name="libraryTable"> |
|||
<library name="appcompat-v7-25.3.1"> |
|||
<ANNOTATIONS> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/0cd2bc27aeb3658d5c6c161585652540e7ba1b97/output/annotations.zip!/" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/0cd2bc27aeb3658d5c6c161585652540e7ba1b97/output/annotations.zip!/" /> |
|||
</ANNOTATIONS> |
|||
<CLASSES> |
|||
<root url="file://$USER_HOME$/.android/build-cache/0cd2bc27aeb3658d5c6c161585652540e7ba1b97/output/res" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/0cd2bc27aeb3658d5c6c161585652540e7ba1b97/output/jars/classes.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/appcompat-v7/25.3.1/appcompat-v7-25.3.1-sources.jar!/" /> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/appcompat-v7/25.3.1/appcompat-v7-25.3.1-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,11 @@ |
|||
<component name="libraryTable"> |
|||
<library name="auto-common-0.8"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.auto/auto-common/0.8/c6f7af0e57b9d69d81b05434ef9f3c5610d498c4/auto-common-0.8.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.auto/auto-common/0.8/24705cafc9997c5eb6ae3270bd6234fdf9912bad/auto-common-0.8-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,12 @@ |
|||
<component name="libraryTable"> |
|||
<library name="butterknife-8.8.1"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/4a3309b3b2609dd8ff3f3cf5ad5164ad5e2b0f37/output/jars/classes.jar!/" /> |
|||
<root url="file://$USER_HOME$/.android/build-cache/4a3309b3b2609dd8ff3f3cf5ad5164ad5e2b0f37/output/res" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife/8.8.1/1de300f9b877d30cea69c2ba84a450549f023ab8/butterknife-8.8.1-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,11 @@ |
|||
<component name="libraryTable"> |
|||
<library name="butterknife-annotations-8.8.1"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife-annotations/8.8.1/bc373fb6bc7bca3035041b924f158fd2b946ee8d/butterknife-annotations-8.8.1.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife-annotations/8.8.1/4f68b7085132dfeb48a0473bc589fdee8a3de757/butterknife-annotations-8.8.1-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,11 @@ |
|||
<component name="libraryTable"> |
|||
<library name="butterknife-compiler-8.8.1"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife-compiler/8.8.1/b2f4505a1babb7b7c11abbbf8ea4c90b18c3aeac/butterknife-compiler-8.8.1.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.jakewharton/butterknife-compiler/8.8.1/97cf58a258bb347d7b8642f3f4996abd0f6adb6/butterknife-compiler-8.8.1-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,14 @@ |
|||
<component name="libraryTable"> |
|||
<library name="common-1.5.20"> |
|||
<ANNOTATIONS> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/9cb24d48e4f17fd5184a5144bc99bdc343fa2f68/output/annotations.zip!/" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/9cb24d48e4f17fd5184a5144bc99bdc343fa2f68/output/annotations.zip!/" /> |
|||
</ANNOTATIONS> |
|||
<CLASSES> |
|||
<root url="file://$USER_HOME$/.android/build-cache/9cb24d48e4f17fd5184a5144bc99bdc343fa2f68/output/res" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/9cb24d48e4f17fd5184a5144bc99bdc343fa2f68/output/jars/classes.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES /> |
|||
</library> |
|||
</component> |
@ -0,0 +1,13 @@ |
|||
<component name="libraryTable"> |
|||
<library name="espresso-core-2.2.2"> |
|||
<CLASSES> |
|||
<root url="file://$USER_HOME$/.android/build-cache/9c17ca252412141515c4eaf439346c3b03f42eeb/output/res" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/9c17ca252412141515c4eaf439346c3b03f42eeb/output/jars/classes.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/test/espresso/espresso-core/2.2.2/espresso-core-2.2.2-sources.jar!/" /> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/test/espresso/espresso-core/2.2.2/espresso-core-2.2.2-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,13 @@ |
|||
<component name="libraryTable"> |
|||
<library name="espresso-idling-resource-2.2.2"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/5c86e8eab3d72b00394bf9e598645f884c7c63a5/output/jars/classes.jar!/" /> |
|||
<root url="file://$USER_HOME$/.android/build-cache/5c86e8eab3d72b00394bf9e598645f884c7c63a5/output/res" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/test/espresso/espresso-idling-resource/2.2.2/espresso-idling-resource-2.2.2-sources.jar!/" /> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/test/espresso/espresso-idling-resource/2.2.2/espresso-idling-resource-2.2.2-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,13 @@ |
|||
<component name="libraryTable"> |
|||
<library name="exposed-instrumentation-api-publish-0.5"> |
|||
<CLASSES> |
|||
<root url="file://$USER_HOME$/.android/build-cache/a6ea49c91460d946e46649e01e209781e6cf4b4a/output/res" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/a6ea49c91460d946e46649e01e209781e6cf4b4a/output/jars/classes.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/test/exposed-instrumentation-api-publish/0.5/exposed-instrumentation-api-publish-0.5-sources.jar!/" /> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/test/exposed-instrumentation-api-publish/0.5/exposed-instrumentation-api-publish-0.5-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,11 @@ |
|||
<component name="libraryTable"> |
|||
<library name="guava-19.0"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/19.0/6ce200f6b23222af3d8abb6b6459e6c44f4bb0e9/guava-19.0.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/19.0/91a4d115400e904f22b03a78deb355e9ea803cd4/guava-19.0-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,11 @@ |
|||
<component name="libraryTable"> |
|||
<library name="hamcrest-core-1.3"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/1dc37250fbc78e23a65a67fbbaf71d2e9cbc3c0b/hamcrest-core-1.3-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,9 @@ |
|||
<component name="libraryTable"> |
|||
<library name="hamcrest-integration-1.3"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-integration/1.3/5de0c73fef18917cd85d0ab70bb23818685e4dfd/hamcrest-integration-1.3.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES /> |
|||
</library> |
|||
</component> |
@ -0,0 +1,9 @@ |
|||
<component name="libraryTable"> |
|||
<library name="hamcrest-library-1.3"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-library/1.3/4785a3c21320980282f9f33d0d1264a69040538f/hamcrest-library-1.3.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES /> |
|||
</library> |
|||
</component> |
@ -0,0 +1,11 @@ |
|||
<component name="libraryTable"> |
|||
<library name="javapoet-1.9.0"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup/javapoet/1.9.0/ecc5cf9c221d55481163e773b24336db149e51/javapoet-1.9.0.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup/javapoet/1.9.0/71920669c77f467b56c8e3fb594758882b81f551/javapoet-1.9.0-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,9 @@ |
|||
<component name="libraryTable"> |
|||
<library name="javawriter-2.1.1"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup/javawriter/2.1.1/67ff45d9ae02e583d0f9b3432a5ebbe05c30c966/javawriter-2.1.1.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES /> |
|||
</library> |
|||
</component> |
@ -0,0 +1,9 @@ |
|||
<component name="libraryTable"> |
|||
<library name="javax.annotation-api-1.2"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/javax.annotation/javax.annotation-api/1.2/479c1e06db31c432330183f5cae684163f186146/javax.annotation-api-1.2.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES /> |
|||
</library> |
|||
</component> |
@ -0,0 +1,9 @@ |
|||
<component name="libraryTable"> |
|||
<library name="javax.inject-1"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/javax.inject/javax.inject/1/6975da39a7040257bd51d21a231b76c915872d38/javax.inject-1.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES /> |
|||
</library> |
|||
</component> |
@ -0,0 +1,9 @@ |
|||
<component name="libraryTable"> |
|||
<library name="jsr305-2.0.1"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/2.0.1/516c03b21d50a644d538de0f0369c620989cd8f0/jsr305-2.0.1.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES /> |
|||
</library> |
|||
</component> |
@ -0,0 +1,11 @@ |
|||
<component name="libraryTable"> |
|||
<library name="junit-4.12"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/2973d150c0dc1fefe998f834810d68f278ea58ec/junit-4.12.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/a6c32b40bf3d76eca54e3c601e5d1470c86fcdfa/junit-4.12-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,17 @@ |
|||
<component name="libraryTable"> |
|||
<library name="recyclerview-v7-25.3.1"> |
|||
<ANNOTATIONS> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/7ea362fec5b11bcc6965bdd4b3893ed136ff8790/output/annotations.zip!/" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/7ea362fec5b11bcc6965bdd4b3893ed136ff8790/output/annotations.zip!/" /> |
|||
</ANNOTATIONS> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/7ea362fec5b11bcc6965bdd4b3893ed136ff8790/output/jars/classes.jar!/" /> |
|||
<root url="file://$USER_HOME$/.android/build-cache/7ea362fec5b11bcc6965bdd4b3893ed136ff8790/output/res" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/recyclerview-v7/25.3.1/recyclerview-v7-25.3.1-sources.jar!/" /> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/recyclerview-v7/25.3.1/recyclerview-v7-25.3.1-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,17 @@ |
|||
<component name="libraryTable"> |
|||
<library name="rules-0.5"> |
|||
<ANNOTATIONS> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/9325b8d6b6f5f91ebcaea025e24b3709451d9d19/output/annotations.zip!/" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/9325b8d6b6f5f91ebcaea025e24b3709451d9d19/output/annotations.zip!/" /> |
|||
</ANNOTATIONS> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/9325b8d6b6f5f91ebcaea025e24b3709451d9d19/output/jars/classes.jar!/" /> |
|||
<root url="file://$USER_HOME$/.android/build-cache/9325b8d6b6f5f91ebcaea025e24b3709451d9d19/output/res" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/test/rules/0.5/rules-0.5-sources.jar!/" /> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/test/rules/0.5/rules-0.5-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,17 @@ |
|||
<component name="libraryTable"> |
|||
<library name="runner-0.5"> |
|||
<ANNOTATIONS> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/4e49e96640bd62fb66d7bd1ea705ff8b23277b30/output/annotations.zip!/" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/4e49e96640bd62fb66d7bd1ea705ff8b23277b30/output/annotations.zip!/" /> |
|||
</ANNOTATIONS> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/4e49e96640bd62fb66d7bd1ea705ff8b23277b30/output/jars/classes.jar!/" /> |
|||
<root url="file://$USER_HOME$/.android/build-cache/4e49e96640bd62fb66d7bd1ea705ff8b23277b30/output/res" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/test/runner/0.5/runner-0.5-sources.jar!/" /> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/test/runner/0.5/runner-0.5-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,11 @@ |
|||
<component name="libraryTable"> |
|||
<library name="support-annotations-25.3.1"> |
|||
<CLASSES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/support-annotations/25.3.1/support-annotations-25.3.1.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/support-annotations/25.3.1/support-annotations-25.3.1-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,17 @@ |
|||
<component name="libraryTable"> |
|||
<library name="support-compat-25.3.1"> |
|||
<ANNOTATIONS> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/b024312c4f67b2aaf003c39ec9cce3123bc11887/output/annotations.zip!/" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/b024312c4f67b2aaf003c39ec9cce3123bc11887/output/annotations.zip!/" /> |
|||
</ANNOTATIONS> |
|||
<CLASSES> |
|||
<root url="file://$USER_HOME$/.android/build-cache/b024312c4f67b2aaf003c39ec9cce3123bc11887/output/res" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/b024312c4f67b2aaf003c39ec9cce3123bc11887/output/jars/classes.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/support-compat/25.3.1/support-compat-25.3.1-sources.jar!/" /> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/support-compat/25.3.1/support-compat-25.3.1-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,17 @@ |
|||
<component name="libraryTable"> |
|||
<library name="support-core-ui-25.3.1"> |
|||
<ANNOTATIONS> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/43b6e8bc3dbd8ffc00905701a79b232e50db9ad7/output/annotations.zip!/" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/43b6e8bc3dbd8ffc00905701a79b232e50db9ad7/output/annotations.zip!/" /> |
|||
</ANNOTATIONS> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/43b6e8bc3dbd8ffc00905701a79b232e50db9ad7/output/jars/classes.jar!/" /> |
|||
<root url="file://$USER_HOME$/.android/build-cache/43b6e8bc3dbd8ffc00905701a79b232e50db9ad7/output/res" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/support-core-ui/25.3.1/support-core-ui-25.3.1-sources.jar!/" /> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/support-core-ui/25.3.1/support-core-ui-25.3.1-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,17 @@ |
|||
<component name="libraryTable"> |
|||
<library name="support-core-utils-25.3.1"> |
|||
<ANNOTATIONS> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/42125c933a4a28eeee7ea740389ec2104ec08034/output/annotations.zip!/" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/42125c933a4a28eeee7ea740389ec2104ec08034/output/annotations.zip!/" /> |
|||
</ANNOTATIONS> |
|||
<CLASSES> |
|||
<root url="file://$USER_HOME$/.android/build-cache/42125c933a4a28eeee7ea740389ec2104ec08034/output/res" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/42125c933a4a28eeee7ea740389ec2104ec08034/output/jars/classes.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/support-core-utils/25.3.1/support-core-utils-25.3.1-sources.jar!/" /> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/support-core-utils/25.3.1/support-core-utils-25.3.1-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,17 @@ |
|||
<component name="libraryTable"> |
|||
<library name="support-fragment-25.3.1"> |
|||
<ANNOTATIONS> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/56b6451666457b89e2ff15b61b1d9b3fe0e16db6/output/annotations.zip!/" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/56b6451666457b89e2ff15b61b1d9b3fe0e16db6/output/annotations.zip!/" /> |
|||
</ANNOTATIONS> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/56b6451666457b89e2ff15b61b1d9b3fe0e16db6/output/jars/classes.jar!/" /> |
|||
<root url="file://$USER_HOME$/.android/build-cache/56b6451666457b89e2ff15b61b1d9b3fe0e16db6/output/res" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/support-fragment/25.3.1/support-fragment-25.3.1-sources.jar!/" /> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/support-fragment/25.3.1/support-fragment-25.3.1-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,17 @@ |
|||
<component name="libraryTable"> |
|||
<library name="support-media-compat-25.3.1"> |
|||
<ANNOTATIONS> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/f1ca6919d3e9176e08e199c56de54351aac5f05a/output/annotations.zip!/" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/f1ca6919d3e9176e08e199c56de54351aac5f05a/output/annotations.zip!/" /> |
|||
</ANNOTATIONS> |
|||
<CLASSES> |
|||
<root url="file://$USER_HOME$/.android/build-cache/f1ca6919d3e9176e08e199c56de54351aac5f05a/output/res" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/f1ca6919d3e9176e08e199c56de54351aac5f05a/output/jars/classes.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/support-media-compat/25.3.1/support-media-compat-25.3.1-sources.jar!/" /> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/support-media-compat/25.3.1/support-media-compat-25.3.1-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,10 @@ |
|||
<component name="libraryTable"> |
|||
<library name="support-v4-25.3.1"> |
|||
<CLASSES> |
|||
<root url="file://$USER_HOME$/.android/build-cache/b0b6835705dfb4d5f4237a2b1cc10dbe254eb1af/output/res" /> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/b0b6835705dfb4d5f4237a2b1cc10dbe254eb1af/output/jars/classes.jar!/" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES /> |
|||
</library> |
|||
</component> |
@ -0,0 +1,13 @@ |
|||
<component name="libraryTable"> |
|||
<library name="support-vector-drawable-25.3.1"> |
|||
<CLASSES> |
|||
<root url="jar://$USER_HOME$/.android/build-cache/7a405513524c444d4aa139ab61911f927325318f/output/jars/classes.jar!/" /> |
|||
<root url="file://$USER_HOME$/.android/build-cache/7a405513524c444d4aa139ab61911f927325318f/output/res" /> |
|||
</CLASSES> |
|||
<JAVADOC /> |
|||
<SOURCES> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/support-vector-drawable/25.3.1/support-vector-drawable-25.3.1-sources.jar!/" /> |
|||
<root url="jar://E:/Environment/android-sdk-windows/extras/android/m2repository/com/android/support/support-vector-drawable/25.3.1/support-vector-drawable-25.3.1-sources.jar!/" /> |
|||
</SOURCES> |
|||
</library> |
|||
</component> |
@ -0,0 +1,62 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="EntryPointsManager"> |
|||
<entry_points version="2.0" /> |
|||
</component> |
|||
<component name="NullableNotNullManager"> |
|||
<option name="myDefaultNullable" value="android.support.annotation.Nullable" /> |
|||
<option name="myDefaultNotNull" value="android.support.annotation.NonNull" /> |
|||
<option name="myNullables"> |
|||
<value> |
|||
<list size="4"> |
|||
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" /> |
|||
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" /> |
|||
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" /> |
|||
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" /> |
|||
</list> |
|||
</value> |
|||
</option> |
|||
<option name="myNotNulls"> |
|||
<value> |
|||
<list size="4"> |
|||
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" /> |
|||
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" /> |
|||
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" /> |
|||
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" /> |
|||
</list> |
|||
</value> |
|||
</option> |
|||
</component> |
|||
<component name="ProjectLevelVcsManager" settingsEditedManually="false"> |
|||
<OptionsSetting value="true" id="Add" /> |
|||
<OptionsSetting value="true" id="Remove" /> |
|||
<OptionsSetting value="true" id="Checkout" /> |
|||
<OptionsSetting value="true" id="Update" /> |
|||
<OptionsSetting value="true" id="Status" /> |
|||
<OptionsSetting value="true" id="Edit" /> |
|||
<ConfirmationsSetting value="0" id="Add" /> |
|||
<ConfirmationsSetting value="0" id="Remove" /> |
|||
</component> |
|||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> |
|||
<output url="file://$PROJECT_DIR$/build/classes" /> |
|||
</component> |
|||
<component name="ProjectType"> |
|||
<option name="id" value="Android" /> |
|||
</component> |
|||
<component name="masterDetails"> |
|||
<states> |
|||
<state key="ProjectJDKs.UI"> |
|||
<settings> |
|||
<last-edited>1.8</last-edited> |
|||
<splitter-proportions> |
|||
<option name="proportions"> |
|||
<list> |
|||
<option value="0.2" /> |
|||
</list> |
|||
</option> |
|||
</splitter-proportions> |
|||
</settings> |
|||
</state> |
|||
</states> |
|||
</component> |
|||
</project> |
@ -0,0 +1,10 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="ProjectModuleManager"> |
|||
<modules> |
|||
<module fileurl="file://$PROJECT_DIR$/AndroidUSBCamera.iml" filepath="$PROJECT_DIR$/AndroidUSBCamera.iml" /> |
|||
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" /> |
|||
<module fileurl="file://$PROJECT_DIR$/libusbcamera/libusbcamera.iml" filepath="$PROJECT_DIR$/libusbcamera/libusbcamera.iml" /> |
|||
</modules> |
|||
</component> |
|||
</project> |
@ -0,0 +1,12 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="RunConfigurationProducerService"> |
|||
<option name="ignoredProducers"> |
|||
<set> |
|||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" /> |
|||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" /> |
|||
<option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" /> |
|||
</set> |
|||
</option> |
|||
</component> |
|||
</project> |
@ -0,0 +1,19 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<module external.linked.project.id="AndroidUSBCamera" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4"> |
|||
<component name="FacetManager"> |
|||
<facet type="java-gradle" name="Java-Gradle"> |
|||
<configuration> |
|||
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" /> |
|||
<option name="BUILDABLE" value="false" /> |
|||
</configuration> |
|||
</facet> |
|||
</component> |
|||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true"> |
|||
<exclude-output /> |
|||
<content url="file://$MODULE_DIR$"> |
|||
<excludeFolder url="file://$MODULE_DIR$/.gradle" /> |
|||
</content> |
|||
<orderEntry type="inheritedJdk" /> |
|||
<orderEntry type="sourceFolder" forTests="false" /> |
|||
</component> |
|||
</module> |
@ -0,0 +1 @@ |
|||
/build |
@ -0,0 +1,136 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4"> |
|||
<component name="FacetManager"> |
|||
<facet type="android-gradle" name="Android-Gradle"> |
|||
<configuration> |
|||
<option name="GRADLE_PROJECT_PATH" value=":app" /> |
|||
</configuration> |
|||
</facet> |
|||
<facet type="android" name="Android"> |
|||
<configuration> |
|||
<option name="SELECTED_BUILD_VARIANT" value="debug" /> |
|||
<option name="SELECTED_TEST_ARTIFACT" value="_android_test_" /> |
|||
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" /> |
|||
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" /> |
|||
<afterSyncTasks> |
|||
<task>generateDebugSources</task> |
|||
</afterSyncTasks> |
|||
<option name="ALLOW_USER_CONFIGURATION" value="false" /> |
|||
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" /> |
|||
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" /> |
|||
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" /> |
|||
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" /> |
|||
</configuration> |
|||
</facet> |
|||
</component> |
|||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false"> |
|||
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" /> |
|||
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" /> |
|||
<exclude-output /> |
|||
<content url="file://$MODULE_DIR$"> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/outputs" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/tmp" /> |
|||
</content> |
|||
<orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" /> |
|||
<orderEntry type="sourceFolder" forTests="false" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="runner-0.5" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="espresso-idling-resource-2.2.2" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="hamcrest-library-1.3" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="hamcrest-integration-1.3" level="project" /> |
|||
<orderEntry type="library" exported="" name="javapoet-1.9.0" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-core-ui-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="auto-common-0.8" level="project" /> |
|||
<orderEntry type="library" exported="" name="butterknife-compiler-8.8.1" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="jsr305-2.0.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-core-utils-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-fragment-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="butterknife-annotations-8.8.1" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="espresso-core-2.2.2" level="project" /> |
|||
<orderEntry type="library" exported="" name="guava-19.0" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="exposed-instrumentation-api-publish-0.5" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="rules-0.5" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="javax.annotation-api-1.2" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="javax.inject-1" level="project" /> |
|||
<orderEntry type="library" exported="" name="common-1.5.20" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="javawriter-2.1.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-v4-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-media-compat-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="hamcrest-core-1.3" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="junit-4.12" level="project" /> |
|||
<orderEntry type="library" exported="" name="recyclerview-v7-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-annotations-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="appcompat-v7-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-vector-drawable-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-compat-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="animated-vector-drawable-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="butterknife-8.8.1" level="project" /> |
|||
<orderEntry type="module" module-name="libusbcamera" exported="" /> |
|||
</component> |
|||
</module> |
@ -0,0 +1,32 @@ |
|||
apply plugin: 'com.android.application' |
|||
|
|||
android { |
|||
compileSdkVersion 25 |
|||
buildToolsVersion "26.0.1" |
|||
defaultConfig { |
|||
applicationId "com.jiangdg.usbcamera" |
|||
minSdkVersion 15 |
|||
targetSdkVersion 25 |
|||
versionCode 1 |
|||
versionName "1.0" |
|||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" |
|||
} |
|||
buildTypes { |
|||
release { |
|||
minifyEnabled false |
|||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' |
|||
} |
|||
} |
|||
} |
|||
|
|||
dependencies { |
|||
compile fileTree(include: ['*.jar'], dir: 'libs') |
|||
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { |
|||
exclude group: 'com.android.support', module: 'support-annotations' |
|||
}) |
|||
compile 'com.android.support:appcompat-v7:25.3.1' |
|||
testCompile 'junit:junit:4.12' |
|||
compile project(':libusbcamera') |
|||
compile 'com.jakewharton:butterknife:8.8.1' |
|||
compile 'com.jakewharton:butterknife-compiler:8.8.1' |
|||
} |
@ -0,0 +1,17 @@ |
|||
# Add project specific ProGuard rules here. |
|||
# By default, the flags in this file are appended to flags specified |
|||
# in E:\Environment\android-sdk-windows/tools/proguard/proguard-android.txt |
|||
# You can edit the include path and order by changing the proguardFiles |
|||
# directive in build.gradle. |
|||
# |
|||
# For more details, see |
|||
# http://developer.android.com/guide/developing/tools/proguard.html |
|||
|
|||
# Add any project specific keep options here: |
|||
|
|||
# If your project uses WebView with JS, uncomment the following |
|||
# and specify the fully qualified class name to the JavaScript interface |
|||
# class: |
|||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { |
|||
# public *; |
|||
#} |
@ -0,0 +1,26 @@ |
|||
package com.jiangdg.usbcamera; |
|||
|
|||
import android.content.Context; |
|||
import android.support.test.InstrumentationRegistry; |
|||
import android.support.test.runner.AndroidJUnit4; |
|||
|
|||
import org.junit.Test; |
|||
import org.junit.runner.RunWith; |
|||
|
|||
import static org.junit.Assert.*; |
|||
|
|||
/** |
|||
* Instrumentation test, which will execute on an Android device. |
|||
* |
|||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a> |
|||
*/ |
|||
@RunWith(AndroidJUnit4.class) |
|||
public class ExampleInstrumentedTest { |
|||
@Test |
|||
public void useAppContext() throws Exception { |
|||
// Context of the app under test.
|
|||
Context appContext = InstrumentationRegistry.getTargetContext(); |
|||
|
|||
assertEquals("com.jiangdg.androidusbcamera", appContext.getPackageName()); |
|||
} |
|||
} |
@ -0,0 +1,23 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
|||
package="com.jiangdg.usbcamera"> |
|||
|
|||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> |
|||
|
|||
<application |
|||
android:name=".application.MyApplication" |
|||
android:allowBackup="true" |
|||
android:icon="@mipmap/ic_launcher" |
|||
android:label="@string/app_name" |
|||
android:supportsRtl="true" |
|||
android:theme="@style/AppTheme"> |
|||
<activity android:name="com.jiangdg.usbcamera.view.MainActivity"> |
|||
<intent-filter> |
|||
<action android:name="android.intent.action.MAIN" /> |
|||
|
|||
<category android:name="android.intent.category.LAUNCHER" /> |
|||
</intent-filter> |
|||
</activity> |
|||
</application> |
|||
|
|||
</manifest> |
@ -0,0 +1,22 @@ |
|||
package com.jiangdg.usbcamera.application; |
|||
|
|||
import android.app.Application; |
|||
|
|||
import com.jiangdg.usbcamera.utils.CrashHandler; |
|||
|
|||
/**全局类 |
|||
* |
|||
* Created by jianddongguo on 2017/7/20. |
|||
*/ |
|||
|
|||
public class MyApplication extends Application { |
|||
private CrashHandler mCrashHandler; |
|||
|
|||
@Override |
|||
public void onCreate() { |
|||
super.onCreate(); |
|||
mCrashHandler = CrashHandler.getInstance(); |
|||
mCrashHandler.init(getApplicationContext(), getClass()); |
|||
|
|||
} |
|||
} |
@ -0,0 +1,190 @@ |
|||
package com.jiangdg.usbcamera.utils; |
|||
|
|||
import android.content.Context; |
|||
import android.content.pm.PackageInfo; |
|||
import android.content.pm.PackageManager; |
|||
import android.content.pm.PackageManager.NameNotFoundException; |
|||
import android.os.Build; |
|||
import android.os.Environment; |
|||
import android.os.Looper; |
|||
import android.widget.Toast; |
|||
|
|||
import java.io.File; |
|||
import java.io.FileNotFoundException; |
|||
import java.io.FileOutputStream; |
|||
import java.io.IOException; |
|||
import java.lang.Thread.UncaughtExceptionHandler; |
|||
import java.lang.reflect.Field; |
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* UncaughtException处理类,当程序发生Uncaught异常的时候,有该类来接管程序,并记录发送错误报告. |
|||
* |
|||
* @author user |
|||
* |
|||
*/ |
|||
public class CrashHandler implements UncaughtExceptionHandler { |
|||
|
|||
public static final String TAG = "CrashHandler"; |
|||
|
|||
public static final String PROGRAM_BROKEN_ACTION = "com.teligen.wccp.PROGRAM_BROKEN"; |
|||
|
|||
// 系统默认的UncaughtException处理类
|
|||
private UncaughtExceptionHandler mDefaultHandler; |
|||
// CrashHandler实例
|
|||
private static CrashHandler instance = new CrashHandler(); |
|||
// 程序的Context对象
|
|||
private Context mContext; |
|||
// 程序的主Activity的class
|
|||
private Class<?> mainActivityClass; |
|||
// 用来存储设备信息和异常信息
|
|||
private Map<String, String> infos = new HashMap<String, String>(); |
|||
|
|||
/** 保证只有一个CrashHandler实例 */ |
|||
private CrashHandler() { |
|||
} |
|||
|
|||
/** 获取CrashHandler实例 ,单例模式 */ |
|||
public static CrashHandler getInstance() { |
|||
return instance; |
|||
} |
|||
|
|||
public void init(Context context, Class<?> activityClass) { |
|||
mContext = context; |
|||
this.setMainActivityClass(activityClass); |
|||
// 获取系统默认的UncaughtException处理器
|
|||
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); |
|||
// 设置该CrashHandler为程序的默认处理器
|
|||
Thread.setDefaultUncaughtExceptionHandler(this); |
|||
} |
|||
|
|||
/** |
|||
* 当UncaughtException发生时会转入该函数来处理 |
|||
*/ |
|||
@Override |
|||
public void uncaughtException(Thread thread, Throwable ex) { |
|||
if (!handleException(ex) && mDefaultHandler != null) { |
|||
// 如果用户没有处理则让系统默认的异常处理器来处理
|
|||
mDefaultHandler.uncaughtException(thread, ex); |
|||
} else { |
|||
//重启应用,释放资源
|
|||
System.out.println("uncaughtException--->" + ex.getMessage()); |
|||
// Log.e(TAG, ex.getMessage());
|
|||
logError(ex); |
|||
try { |
|||
Thread.sleep(3000); |
|||
} catch (InterruptedException e) { |
|||
// Log.e("debug", "error:", e);
|
|||
} |
|||
// AppManagerUtils.removeAllActivities();
|
|||
// AppManagerUtils.restartApp(mContext,mContext.getPackageName());
|
|||
// AppManagerUtils.releaseAppResource();
|
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. |
|||
* |
|||
* @param ex |
|||
* @return true:如果处理了该异常信息;否则返回false. |
|||
*/ |
|||
private boolean handleException(Throwable ex) { |
|||
if (ex == null) { |
|||
return false; |
|||
} |
|||
new Thread(new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
Looper.prepare(); |
|||
Toast.makeText(mContext.getApplicationContext(), |
|||
"程序异常退出,即将重启...", Toast.LENGTH_LONG).show(); |
|||
Looper.loop(); |
|||
} |
|||
}).start(); |
|||
// 收集设备参数信息
|
|||
collectDeviceInfo(mContext.getApplicationContext()); |
|||
// 保存日志文件
|
|||
logError(ex); |
|||
return true; |
|||
} |
|||
|
|||
/** |
|||
* 收集设备参数信息 |
|||
* |
|||
* @param ctx |
|||
*/ |
|||
public void collectDeviceInfo(Context ctx) { |
|||
try { |
|||
PackageManager pm = ctx.getPackageManager(); |
|||
PackageInfo pi = pm.getPackageInfo(ctx.getPackageName(), |
|||
PackageManager.GET_ACTIVITIES); |
|||
if (pi != null) { |
|||
String versionName = pi.versionName == null ? "null" |
|||
: pi.versionName; |
|||
String versionCode = pi.versionCode + ""; |
|||
infos.put("versionName", versionName); |
|||
infos.put("versionCode", versionCode); |
|||
} |
|||
} catch (NameNotFoundException e) { |
|||
// Log.e(TAG, "收集包信息出现错误", e);
|
|||
} |
|||
Field[] fields = Build.class.getDeclaredFields(); |
|||
for (Field field : fields) { |
|||
try { |
|||
field.setAccessible(true); |
|||
infos.put(field.getName(), field.get(null).toString()); |
|||
} catch (Exception e) { |
|||
// Log.e(TAG, "收集系统信息出现错误", e);
|
|||
} |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 保存错误信息到文件中 |
|||
* |
|||
* @param ex |
|||
* @return 返回文件名称,便于将文件传送到服务器 |
|||
*/ |
|||
private void logError(Throwable ex) { |
|||
|
|||
StringBuffer sb = new StringBuffer(); |
|||
// for (Map.Entry<String, String> entry : infos.entrySet()) {
|
|||
// String key = entry.getKey();
|
|||
// String value = entry.getValue();
|
|||
// sb.append(key + "=" + value + "\n");
|
|||
// }
|
|||
int num = ex.getStackTrace().length; |
|||
for (int i=0;i<num;i++){ |
|||
sb.append(ex.getStackTrace()[i].toString()); |
|||
sb.append("\n"); |
|||
} |
|||
|
|||
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() |
|||
+File.separator+System.currentTimeMillis()+".txt"); |
|||
FileOutputStream fos = null; |
|||
try { |
|||
fos = new FileOutputStream(file); |
|||
fos.write((sb.toString()+"异常:"+ex.getLocalizedMessage()).getBytes()); |
|||
} catch (FileNotFoundException e) { |
|||
e.printStackTrace(); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
}finally { |
|||
try { |
|||
fos.close(); |
|||
} catch (IOException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
// Log.e(TAG, "出现未捕捉异常,程序异常退出!", ex);
|
|||
} |
|||
|
|||
public Class<?> getMainActivityClass() { |
|||
return mainActivityClass; |
|||
} |
|||
|
|||
public void setMainActivityClass(Class<?> mainActivityClass) { |
|||
this.mainActivityClass = mainActivityClass; |
|||
} |
|||
} |
@ -0,0 +1,198 @@ |
|||
/* |
|||
* UVCCamera |
|||
* library and sample to access to UVC web camera on non-rooted Android device |
|||
* |
|||
* Copyright (c) 2014-2017 saki t_saki@serenegiant.com |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
* |
|||
* All files in the folder are under this Apache License, Version 2.0. |
|||
* Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder |
|||
* may have a different license, see the respective files. |
|||
*/ |
|||
|
|||
package com.jiangdg.usbcamera.view; |
|||
|
|||
import android.Manifest; |
|||
import android.annotation.SuppressLint; |
|||
import android.app.Activity; |
|||
import android.content.pm.PackageManager; |
|||
import android.os.Bundle; |
|||
import android.os.Handler; |
|||
import android.os.Looper; |
|||
import android.support.annotation.NonNull; |
|||
import android.support.annotation.StringRes; |
|||
import android.support.v7.app.AppCompatActivity; |
|||
import android.util.Log; |
|||
import android.widget.Toast; |
|||
|
|||
import com.serenegiant.dialog.MessageDialogFragment; |
|||
import com.serenegiant.utils.BuildCheck; |
|||
import com.serenegiant.utils.HandlerThreadHandler; |
|||
import com.serenegiant.utils.PermissionCheck; |
|||
|
|||
/** |
|||
* Created by saki on 2016/11/18. |
|||
* |
|||
*/ |
|||
public class BaseActivity extends AppCompatActivity { |
|||
|
|||
private static boolean DEBUG = false; |
|||
private static final String TAG = BaseActivity.class.getSimpleName(); |
|||
|
|||
// 处理UI的Handler
|
|||
private final Handler mUIHandler = new Handler(Looper.getMainLooper()); |
|||
private final Thread mUiThread = mUIHandler.getLooper().getThread(); |
|||
// 工作线程Handler
|
|||
private Handler mWorkerHandler; |
|||
private long mWorkerThreadID = -1; |
|||
|
|||
@Override |
|||
protected void onCreate(final Bundle savedInstanceState) { |
|||
super.onCreate(savedInstanceState); |
|||
// 创建工作线程
|
|||
if (mWorkerHandler == null) { |
|||
mWorkerHandler = HandlerThreadHandler.createHandler(TAG); |
|||
mWorkerThreadID = mWorkerHandler.getLooper().getThread().getId(); |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
protected void onPause() { |
|||
clearToast(); |
|||
super.onPause(); |
|||
} |
|||
|
|||
@Override |
|||
protected synchronized void onDestroy() { |
|||
// 释放线程资源
|
|||
if (mWorkerHandler != null) { |
|||
try { |
|||
mWorkerHandler.getLooper().quit(); |
|||
} catch (final Exception e) { |
|||
//
|
|||
} |
|||
mWorkerHandler = null; |
|||
} |
|||
super.onDestroy(); |
|||
} |
|||
|
|||
//================================================================================
|
|||
/** |
|||
* |
|||
* 子线程中更新UI,duration为延迟多久执行 |
|||
* |
|||
*/ |
|||
public final void runOnUiThread(final Runnable task, final long duration) { |
|||
if (task == null) return; |
|||
mUIHandler.removeCallbacks(task); |
|||
if ((duration > 0) || Thread.currentThread() != mUiThread) { |
|||
mUIHandler.postDelayed(task, duration); |
|||
} else { |
|||
try { |
|||
task.run(); |
|||
} catch (final Exception e) { |
|||
Log.w(TAG, e); |
|||
} |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 移除更新UI task |
|||
* @param task |
|||
*/ |
|||
public final void removeFromUiThread(final Runnable task) { |
|||
if (task == null) return; |
|||
mUIHandler.removeCallbacks(task); |
|||
} |
|||
|
|||
/** |
|||
* 工作子线程中执行的任务 |
|||
*/ |
|||
protected final synchronized void queueEvent(final Runnable task, final long delayMillis) { |
|||
if ((task == null) || (mWorkerHandler == null)) return; |
|||
try { |
|||
mWorkerHandler.removeCallbacks(task); |
|||
if (delayMillis > 0) { |
|||
mWorkerHandler.postDelayed(task, delayMillis); |
|||
} else if (mWorkerThreadID == Thread.currentThread().getId()) { |
|||
task.run(); |
|||
} else { |
|||
mWorkerHandler.post(task); |
|||
} |
|||
} catch (final Exception e) { |
|||
// ignore
|
|||
} |
|||
} |
|||
|
|||
protected final synchronized void removeEvent(final Runnable task) { |
|||
if (task == null) return; |
|||
try { |
|||
mWorkerHandler.removeCallbacks(task); |
|||
} catch (final Exception e) { |
|||
// ignore
|
|||
} |
|||
} |
|||
|
|||
//================================================================================
|
|||
private Toast mToast; |
|||
|
|||
protected void showToast(@StringRes final int msg, final Object... args) { |
|||
removeFromUiThread(mShowToastTask); |
|||
mShowToastTask = new ShowToastTask(msg, args); |
|||
runOnUiThread(mShowToastTask, 0); |
|||
} |
|||
|
|||
|
|||
protected void clearToast() { |
|||
removeFromUiThread(mShowToastTask); |
|||
mShowToastTask = null; |
|||
try { |
|||
if (mToast != null) { |
|||
mToast.cancel(); |
|||
mToast = null; |
|||
} |
|||
} catch (final Exception e) { |
|||
// ignore
|
|||
} |
|||
} |
|||
|
|||
private ShowToastTask mShowToastTask; |
|||
private final class ShowToastTask implements Runnable { |
|||
final int msg; |
|||
final Object args; |
|||
private ShowToastTask(@StringRes final int msg, final Object... args) { |
|||
this.msg = msg; |
|||
this.args = args; |
|||
} |
|||
|
|||
@Override |
|||
public void run() { |
|||
try { |
|||
if (mToast != null) { |
|||
mToast.cancel(); |
|||
mToast = null; |
|||
} |
|||
if (args != null) { |
|||
final String _msg = getString(msg, args); |
|||
mToast = Toast.makeText(BaseActivity.this, _msg, Toast.LENGTH_SHORT); |
|||
} else { |
|||
mToast = Toast.makeText(BaseActivity.this, msg, Toast.LENGTH_SHORT); |
|||
} |
|||
mToast.show(); |
|||
} catch (final Exception e) { |
|||
// ignore
|
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,250 @@ |
|||
package com.jiangdg.usbcamera.view; |
|||
|
|||
import android.hardware.usb.UsbDevice; |
|||
import android.os.Bundle; |
|||
import android.util.Log; |
|||
import android.view.Surface; |
|||
import android.view.SurfaceHolder; |
|||
import android.view.SurfaceView; |
|||
import android.view.View; |
|||
import android.view.View.OnClickListener; |
|||
import android.widget.ImageButton; |
|||
import android.widget.Toast; |
|||
|
|||
import com.jiangdg.usbcamera.R; |
|||
import com.serenegiant.usb.CameraDialog; |
|||
import com.serenegiant.usb.USBMonitor; |
|||
import com.serenegiant.usb.USBMonitor.OnDeviceConnectListener; |
|||
import com.serenegiant.usb.USBMonitor.UsbControlBlock; |
|||
import com.serenegiant.usb.UVCCamera; |
|||
|
|||
import butterknife.BindView; |
|||
import butterknife.ButterKnife; |
|||
import butterknife.OnClick; |
|||
|
|||
public class MainActivity extends BaseActivity implements CameraDialog.CameraDialogParent { |
|||
private static final boolean DEBUG = true; |
|||
private static final String TAG = "MainActivity"; |
|||
@BindView(R.id.camera_surface_view) |
|||
public SurfaceView mUVCCameraView; |
|||
|
|||
private final Object mSync = new Object(); |
|||
// USB和USB Camera访问管理类
|
|||
private USBMonitor mUSBMonitor; |
|||
private UVCCamera mUVCCamera; |
|||
|
|||
private Surface mPreviewSurface; |
|||
private boolean isActive, isPreview; |
|||
|
|||
private final SurfaceHolder.Callback mSurfaceViewCallback = new SurfaceHolder.Callback() { |
|||
@Override |
|||
public void surfaceCreated(final SurfaceHolder holder) { |
|||
if (DEBUG) Log.v(TAG, "surfaceCreated:"); |
|||
} |
|||
|
|||
@Override |
|||
public void surfaceChanged(final SurfaceHolder holder, final int format, final int width, final int height) { |
|||
if ((width == 0) || (height == 0)) return; |
|||
if (DEBUG) Log.v(TAG, "surfaceChanged:"); |
|||
mPreviewSurface = holder.getSurface(); |
|||
synchronized (mSync) { |
|||
if (isActive && !isPreview && (mUVCCamera != null)) { |
|||
mUVCCamera.setPreviewDisplay(mPreviewSurface); |
|||
mUVCCamera.startPreview(); |
|||
isPreview = true; |
|||
} |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void surfaceDestroyed(final SurfaceHolder holder) { |
|||
if (DEBUG) Log.v(TAG, "surfaceDestroyed:"); |
|||
synchronized (mSync) { |
|||
if (mUVCCamera != null) { |
|||
mUVCCamera.stopPreview(); |
|||
} |
|||
isPreview = false; |
|||
} |
|||
mPreviewSurface = null; |
|||
} |
|||
}; |
|||
|
|||
@Override |
|||
protected void onCreate(final Bundle savedInstanceState) { |
|||
super.onCreate(savedInstanceState); |
|||
setContentView(R.layout.activity_main); |
|||
// 绑定Activity
|
|||
ButterKnife.bind(this); |
|||
mUVCCameraView.getHolder().addCallback(mSurfaceViewCallback); |
|||
|
|||
// 初始化USBMonitor
|
|||
// 注册USB设备监听器
|
|||
mUSBMonitor = new USBMonitor(this, new OnDeviceConnectListener() { |
|||
@Override |
|||
public void onAttach(final UsbDevice device) { |
|||
if (DEBUG) Log.v(TAG, "onAttach:"); |
|||
Toast.makeText(MainActivity.this, "检测到USB设备", Toast.LENGTH_SHORT).show(); |
|||
} |
|||
|
|||
@Override |
|||
public void onConnect(final UsbDevice device, final UsbControlBlock ctrlBlock, final boolean createNew) { |
|||
if (DEBUG) Log.v(TAG, "onConnect:"); |
|||
Toast.makeText(MainActivity.this, "成功连接到USB设备", Toast.LENGTH_SHORT).show(); |
|||
synchronized (mSync) { |
|||
if (mUVCCamera != null) { |
|||
mUVCCamera.destroy(); |
|||
} |
|||
isActive = isPreview = false; |
|||
} |
|||
queueEvent(new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
synchronized (mSync) { |
|||
final UVCCamera camera = new UVCCamera(); |
|||
camera.open(ctrlBlock); |
|||
if (DEBUG) Log.i(TAG, "supportedSize:" + camera.getSupportedSize()); |
|||
try { |
|||
camera.setPreviewSize(UVCCamera.DEFAULT_PREVIEW_WIDTH, UVCCamera.DEFAULT_PREVIEW_HEIGHT, UVCCamera.FRAME_FORMAT_MJPEG); |
|||
} catch (final IllegalArgumentException e) { |
|||
try { |
|||
// fallback to YUV mode
|
|||
camera.setPreviewSize(UVCCamera.DEFAULT_PREVIEW_WIDTH, UVCCamera.DEFAULT_PREVIEW_HEIGHT, UVCCamera.DEFAULT_PREVIEW_MODE); |
|||
} catch (final IllegalArgumentException e1) { |
|||
camera.destroy(); |
|||
return; |
|||
} |
|||
} |
|||
mPreviewSurface = mUVCCameraView.getHolder().getSurface(); |
|||
if (mPreviewSurface != null) { |
|||
isActive = true; |
|||
camera.setPreviewDisplay(mPreviewSurface); |
|||
camera.startPreview(); |
|||
isPreview = true; |
|||
} |
|||
synchronized (mSync) { |
|||
mUVCCamera = camera; |
|||
} |
|||
} |
|||
} |
|||
}, 0); |
|||
} |
|||
|
|||
@Override |
|||
public void onDisconnect(final UsbDevice device, final UsbControlBlock ctrlBlock) { |
|||
if (DEBUG) Log.v(TAG, "onDisconnect:"); |
|||
Toast.makeText(MainActivity.this, "与USB设备断开连接", Toast.LENGTH_SHORT).show(); |
|||
// XXX you should check whether the comming device equal to camera device that currently using
|
|||
queueEvent(new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
synchronized (mSync) { |
|||
if (mUVCCamera != null) { |
|||
mUVCCamera.close(); |
|||
if (mPreviewSurface != null) { |
|||
mPreviewSurface.release(); |
|||
mPreviewSurface = null; |
|||
} |
|||
isActive = isPreview = false; |
|||
} |
|||
} |
|||
} |
|||
}, 0); |
|||
} |
|||
|
|||
@Override |
|||
public void onDettach(final UsbDevice device) { |
|||
if (DEBUG) Log.v(TAG, "onDettach:"); |
|||
Toast.makeText(MainActivity.this, "未检测到USB设备", Toast.LENGTH_SHORT).show(); |
|||
} |
|||
|
|||
@Override |
|||
public void onCancel(final UsbDevice device) { |
|||
} |
|||
}); |
|||
} |
|||
|
|||
@Override |
|||
protected void onStart() { |
|||
super.onStart(); |
|||
if (DEBUG) Log.v(TAG, "onStart:"); |
|||
synchronized (mSync) { |
|||
// 注册
|
|||
if (mUSBMonitor != null) { |
|||
mUSBMonitor.register(); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
protected void onStop() { |
|||
if (DEBUG) Log.v(TAG, "onStop:"); |
|||
synchronized (mSync) { |
|||
// 注销
|
|||
if (mUSBMonitor != null) { |
|||
mUSBMonitor.unregister(); |
|||
} |
|||
} |
|||
super.onStop(); |
|||
} |
|||
|
|||
@Override |
|||
protected void onDestroy() { |
|||
if (DEBUG) Log.v(TAG, "onDestroy:"); |
|||
synchronized (mSync) { |
|||
isActive = isPreview = false; |
|||
if (mUVCCamera != null) { |
|||
mUVCCamera.destroy(); |
|||
mUVCCamera = null; |
|||
} |
|||
// 释放资源
|
|||
if (mUSBMonitor != null) { |
|||
mUSBMonitor.destroy(); |
|||
mUSBMonitor = null; |
|||
} |
|||
} |
|||
mUVCCameraView = null; |
|||
super.onDestroy(); |
|||
} |
|||
|
|||
@OnClick({R.id.camera_surface_view}) |
|||
public void onViewClicked(View view){ |
|||
int vId= view.getId(); |
|||
switch (vId){ |
|||
case R.id.camera_surface_view: |
|||
if (mUVCCamera == null) { |
|||
// XXX calling CameraDialog.showDialog is necessary at only first time(only when app has no permission).
|
|||
// 当APP访问USB设备没有被授权时,弹出对话框
|
|||
CameraDialog.showDialog(MainActivity.this); |
|||
} else { |
|||
synchronized (mSync) { |
|||
mUVCCamera.destroy(); |
|||
mUVCCamera = null; |
|||
isActive = isPreview = false; |
|||
} |
|||
} |
|||
break; |
|||
} |
|||
} |
|||
|
|||
|
|||
/** |
|||
* to access from CameraDialog |
|||
* @return |
|||
*/ |
|||
@Override |
|||
public USBMonitor getUSBMonitor() { |
|||
return mUSBMonitor; |
|||
} |
|||
|
|||
@Override |
|||
public void onDialogResult(boolean canceled) { |
|||
if (canceled) { |
|||
runOnUiThread(new Runnable() { |
|||
@Override |
|||
public void run() { |
|||
// FIXME
|
|||
} |
|||
}, 0); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,15 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
|
|||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" |
|||
xmlns:tools="http://schemas.android.com/tools" |
|||
android:id="@+id/container" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="match_parent" |
|||
tools:ignore="MergeRootFrame" > |
|||
|
|||
<SurfaceView |
|||
android:id="@+id/camera_surface_view" |
|||
android:layout_width="match_parent" |
|||
android:layout_height="match_parent" /> |
|||
|
|||
</FrameLayout> |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 7.5 KiB |
After Width: | Height: | Size: 10 KiB |
@ -0,0 +1,6 @@ |
|||
<resources> |
|||
<!-- Example customization of dimensions originally defined in res/values/dimens.xml |
|||
(such as screen margins) for screens with more than 820dp of available width. This |
|||
would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). --> |
|||
<dimen name="activity_horizontal_margin">64dp</dimen> |
|||
</resources> |
@ -0,0 +1,6 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<resources> |
|||
<color name="colorPrimary">#3F51B5</color> |
|||
<color name="colorPrimaryDark">#303F9F</color> |
|||
<color name="colorAccent">#FF4081</color> |
|||
</resources> |
@ -0,0 +1,5 @@ |
|||
<resources> |
|||
<!-- Default screen margins, per the Android Design guidelines. --> |
|||
<dimen name="activity_horizontal_margin">16dp</dimen> |
|||
<dimen name="activity_vertical_margin">16dp</dimen> |
|||
</resources> |
@ -0,0 +1,3 @@ |
|||
<resources> |
|||
<string name="app_name">AndroidUSBCamera</string> |
|||
</resources> |
@ -0,0 +1,11 @@ |
|||
<resources> |
|||
|
|||
<!-- Base application theme. --> |
|||
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> |
|||
<!-- Customize your theme here. --> |
|||
<item name="colorPrimary">@color/colorPrimary</item> |
|||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> |
|||
<item name="colorAccent">@color/colorAccent</item> |
|||
</style> |
|||
|
|||
</resources> |
@ -0,0 +1,17 @@ |
|||
package com.jiangdg.usbcamera; |
|||
|
|||
import org.junit.Test; |
|||
|
|||
import static org.junit.Assert.*; |
|||
|
|||
/** |
|||
* Example local unit test, which will execute on the development machine (host). |
|||
* |
|||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a> |
|||
*/ |
|||
public class ExampleUnitTest { |
|||
@Test |
|||
public void addition_isCorrect() throws Exception { |
|||
assertEquals(4, 2 + 2); |
|||
} |
|||
} |
@ -0,0 +1,31 @@ |
|||
// Top-level build file where you can add configuration options common to all sub-projects/modules. |
|||
buildscript { |
|||
repositories { |
|||
jcenter() |
|||
} |
|||
dependencies { |
|||
classpath 'com.android.tools.build:gradle:2.3.1' |
|||
} |
|||
} |
|||
|
|||
allprojects { |
|||
repositories { |
|||
maven { url 'http://raw.github.com/saki4510t/libcommon/master/repository/' } |
|||
jcenter() |
|||
} |
|||
} |
|||
|
|||
task clean(type: Delete) { |
|||
delete rootProject.buildDir |
|||
} |
|||
|
|||
ext { |
|||
supportLibVersion = '25.3.1' // variable that can be referenced to keep support libs consistent |
|||
commonLibVersion= '1.5.20' |
|||
versionBuildTool = '25.0.2' |
|||
versionCompiler = 25 |
|||
versionTarget = 23 |
|||
versionNameString = '1.0.0' |
|||
javaSourceCompatibility = JavaVersion.VERSION_1_7 |
|||
javaTargetCompatibility = JavaVersion.VERSION_1_7 |
|||
} |
Binary file not shown.
Binary file not shown.
@ -0,0 +1,17 @@ |
|||
# Project-wide Gradle settings. |
|||
|
|||
# IDE (e.g. Android Studio) users: |
|||
# Gradle settings configured through the IDE *will override* |
|||
# any settings specified in this file. |
|||
|
|||
# For more details on how to configure your build environment visit |
|||
# http://www.gradle.org/docs/current/userguide/build_environment.html |
|||
|
|||
# Specifies the JVM arguments used for the daemon process. |
|||
# The setting is particularly useful for tweaking memory settings. |
|||
org.gradle.jvmargs=-Xmx1536m |
|||
|
|||
# When configured, Gradle will run in incubating parallel mode. |
|||
# This option should only be used with decoupled projects. More details, visit |
|||
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects |
|||
# org.gradle.parallel=true |
Binary file not shown.
@ -0,0 +1,6 @@ |
|||
#Mon Dec 28 10:00:20 PST 2015 |
|||
distributionBase=GRADLE_USER_HOME |
|||
distributionPath=wrapper/dists |
|||
zipStoreBase=GRADLE_USER_HOME |
|||
zipStorePath=wrapper/dists |
|||
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip |
@ -0,0 +1,160 @@ |
|||
#!/usr/bin/env bash |
|||
|
|||
############################################################################## |
|||
## |
|||
## Gradle start up script for UN*X |
|||
## |
|||
############################################################################## |
|||
|
|||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. |
|||
DEFAULT_JVM_OPTS="" |
|||
|
|||
APP_NAME="Gradle" |
|||
APP_BASE_NAME=`basename "$0"` |
|||
|
|||
# Use the maximum available, or set MAX_FD != -1 to use that value. |
|||
MAX_FD="maximum" |
|||
|
|||
warn ( ) { |
|||
echo "$*" |
|||
} |
|||
|
|||
die ( ) { |
|||
echo |
|||
echo "$*" |
|||
echo |
|||
exit 1 |
|||
} |
|||
|
|||
# OS specific support (must be 'true' or 'false'). |
|||
cygwin=false |
|||
msys=false |
|||
darwin=false |
|||
case "`uname`" in |
|||
CYGWIN* ) |
|||
cygwin=true |
|||
;; |
|||
Darwin* ) |
|||
darwin=true |
|||
;; |
|||
MINGW* ) |
|||
msys=true |
|||
;; |
|||
esac |
|||
|
|||
# Attempt to set APP_HOME |
|||
# Resolve links: $0 may be a link |
|||
PRG="$0" |
|||
# Need this for relative symlinks. |
|||
while [ -h "$PRG" ] ; do |
|||
ls=`ls -ld "$PRG"` |
|||
link=`expr "$ls" : '.*-> \(.*\)$'` |
|||
if expr "$link" : '/.*' > /dev/null; then |
|||
PRG="$link" |
|||
else |
|||
PRG=`dirname "$PRG"`"/$link" |
|||
fi |
|||
done |
|||
SAVED="`pwd`" |
|||
cd "`dirname \"$PRG\"`/" >/dev/null |
|||
APP_HOME="`pwd -P`" |
|||
cd "$SAVED" >/dev/null |
|||
|
|||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar |
|||
|
|||
# Determine the Java command to use to start the JVM. |
|||
if [ -n "$JAVA_HOME" ] ; then |
|||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then |
|||
# IBM's JDK on AIX uses strange locations for the executables |
|||
JAVACMD="$JAVA_HOME/jre/sh/java" |
|||
else |
|||
JAVACMD="$JAVA_HOME/bin/java" |
|||
fi |
|||
if [ ! -x "$JAVACMD" ] ; then |
|||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME |
|||
|
|||
Please set the JAVA_HOME variable in your environment to match the |
|||
location of your Java installation." |
|||
fi |
|||
else |
|||
JAVACMD="java" |
|||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. |
|||
|
|||
Please set the JAVA_HOME variable in your environment to match the |
|||
location of your Java installation." |
|||
fi |
|||
|
|||
# Increase the maximum file descriptors if we can. |
|||
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then |
|||
MAX_FD_LIMIT=`ulimit -H -n` |
|||
if [ $? -eq 0 ] ; then |
|||
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then |
|||
MAX_FD="$MAX_FD_LIMIT" |
|||
fi |
|||
ulimit -n $MAX_FD |
|||
if [ $? -ne 0 ] ; then |
|||
warn "Could not set maximum file descriptor limit: $MAX_FD" |
|||
fi |
|||
else |
|||
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" |
|||
fi |
|||
fi |
|||
|
|||
# For Darwin, add options to specify how the application appears in the dock |
|||
if $darwin; then |
|||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" |
|||
fi |
|||
|
|||
# For Cygwin, switch paths to Windows format before running java |
|||
if $cygwin ; then |
|||
APP_HOME=`cygpath --path --mixed "$APP_HOME"` |
|||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` |
|||
JAVACMD=`cygpath --unix "$JAVACMD"` |
|||
|
|||
# We build the pattern for arguments to be converted via cygpath |
|||
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` |
|||
SEP="" |
|||
for dir in $ROOTDIRSRAW ; do |
|||
ROOTDIRS="$ROOTDIRS$SEP$dir" |
|||
SEP="|" |
|||
done |
|||
OURCYGPATTERN="(^($ROOTDIRS))" |
|||
# Add a user-defined pattern to the cygpath arguments |
|||
if [ "$GRADLE_CYGPATTERN" != "" ] ; then |
|||
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" |
|||
fi |
|||
# Now convert the arguments - kludge to limit ourselves to /bin/sh |
|||
i=0 |
|||
for arg in "$@" ; do |
|||
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` |
|||
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option |
|||
|
|||
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition |
|||
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` |
|||
else |
|||
eval `echo args$i`="\"$arg\"" |
|||
fi |
|||
i=$((i+1)) |
|||
done |
|||
case $i in |
|||
(0) set -- ;; |
|||
(1) set -- "$args0" ;; |
|||
(2) set -- "$args0" "$args1" ;; |
|||
(3) set -- "$args0" "$args1" "$args2" ;; |
|||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;; |
|||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; |
|||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; |
|||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; |
|||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; |
|||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; |
|||
esac |
|||
fi |
|||
|
|||
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules |
|||
function splitJvmOpts() { |
|||
JVM_OPTS=("$@") |
|||
} |
|||
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS |
|||
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" |
|||
|
|||
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" |
@ -0,0 +1,90 @@ |
|||
@if "%DEBUG%" == "" @echo off |
|||
@rem ########################################################################## |
|||
@rem |
|||
@rem Gradle startup script for Windows |
|||
@rem |
|||
@rem ########################################################################## |
|||
|
|||
@rem Set local scope for the variables with windows NT shell |
|||
if "%OS%"=="Windows_NT" setlocal |
|||
|
|||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. |
|||
set DEFAULT_JVM_OPTS= |
|||
|
|||
set DIRNAME=%~dp0 |
|||
if "%DIRNAME%" == "" set DIRNAME=. |
|||
set APP_BASE_NAME=%~n0 |
|||
set APP_HOME=%DIRNAME% |
|||
|
|||
@rem Find java.exe |
|||
if defined JAVA_HOME goto findJavaFromJavaHome |
|||
|
|||
set JAVA_EXE=java.exe |
|||
%JAVA_EXE% -version >NUL 2>&1 |
|||
if "%ERRORLEVEL%" == "0" goto init |
|||
|
|||
echo. |
|||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. |
|||
echo. |
|||
echo Please set the JAVA_HOME variable in your environment to match the |
|||
echo location of your Java installation. |
|||
|
|||
goto fail |
|||
|
|||
:findJavaFromJavaHome |
|||
set JAVA_HOME=%JAVA_HOME:"=% |
|||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe |
|||
|
|||
if exist "%JAVA_EXE%" goto init |
|||
|
|||
echo. |
|||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% |
|||
echo. |
|||
echo Please set the JAVA_HOME variable in your environment to match the |
|||
echo location of your Java installation. |
|||
|
|||
goto fail |
|||
|
|||
:init |
|||
@rem Get command-line arguments, handling Windowz variants |
|||
|
|||
if not "%OS%" == "Windows_NT" goto win9xME_args |
|||
if "%@eval[2+2]" == "4" goto 4NT_args |
|||
|
|||
:win9xME_args |
|||
@rem Slurp the command line arguments. |
|||
set CMD_LINE_ARGS= |
|||
set _SKIP=2 |
|||
|
|||
:win9xME_args_slurp |
|||
if "x%~1" == "x" goto execute |
|||
|
|||
set CMD_LINE_ARGS=%* |
|||
goto execute |
|||
|
|||
:4NT_args |
|||
@rem Get arguments from the 4NT Shell from JP Software |
|||
set CMD_LINE_ARGS=%$ |
|||
|
|||
:execute |
|||
@rem Setup the command line |
|||
|
|||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar |
|||
|
|||
@rem Execute Gradle |
|||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% |
|||
|
|||
:end |
|||
@rem End local scope for the variables with windows NT shell |
|||
if "%ERRORLEVEL%"=="0" goto mainEnd |
|||
|
|||
:fail |
|||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of |
|||
rem the _cmd.exe /c_ return code! |
|||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 |
|||
exit /b 1 |
|||
|
|||
:mainEnd |
|||
if "%OS%"=="Windows_NT" endlocal |
|||
|
|||
:omega |
@ -0,0 +1 @@ |
|||
/build |
@ -0,0 +1,35 @@ |
|||
apply plugin: 'com.android.library' |
|||
|
|||
android { |
|||
compileSdkVersion 25 |
|||
buildToolsVersion "26.0.1" |
|||
|
|||
defaultConfig { |
|||
minSdkVersion 15 |
|||
targetSdkVersion 25 |
|||
versionCode 1 |
|||
versionName "1.0" |
|||
|
|||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" |
|||
|
|||
} |
|||
buildTypes { |
|||
release { |
|||
minifyEnabled false |
|||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
dependencies { |
|||
compile fileTree(dir: 'libs', include: ['*.jar']) |
|||
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { |
|||
exclude group: 'com.android.support', module: 'support-annotations' |
|||
}) |
|||
compile 'com.android.support:appcompat-v7:25.3.1' |
|||
testCompile 'junit:junit:4.12' |
|||
compile("com.serenegiant:common:${commonLibVersion}") { |
|||
exclude module: 'support-v4' |
|||
} |
|||
} |
@ -0,0 +1,131 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<module external.linked.project.id=":libusbcamera" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4"> |
|||
<component name="FacetManager"> |
|||
<facet type="android-gradle" name="Android-Gradle"> |
|||
<configuration> |
|||
<option name="GRADLE_PROJECT_PATH" value=":libusbcamera" /> |
|||
</configuration> |
|||
</facet> |
|||
<facet type="android" name="Android"> |
|||
<configuration> |
|||
<option name="SELECTED_BUILD_VARIANT" value="debug" /> |
|||
<option name="SELECTED_TEST_ARTIFACT" value="_android_test_" /> |
|||
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" /> |
|||
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" /> |
|||
<afterSyncTasks> |
|||
<task>generateDebugSources</task> |
|||
</afterSyncTasks> |
|||
<option name="ALLOW_USER_CONFIGURATION" value="false" /> |
|||
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" /> |
|||
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" /> |
|||
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" /> |
|||
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" /> |
|||
<option name="LIBRARY_PROJECT" value="true" /> |
|||
</configuration> |
|||
</facet> |
|||
</component> |
|||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false"> |
|||
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" /> |
|||
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" /> |
|||
<exclude-output /> |
|||
<content url="file://$MODULE_DIR$"> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/jniLibs" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" /> |
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/outputs" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/build/tmp" /> |
|||
</content> |
|||
<orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" /> |
|||
<orderEntry type="sourceFolder" forTests="false" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="runner-0.5" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="espresso-idling-resource-2.2.2" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="hamcrest-library-1.3" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="hamcrest-integration-1.3" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-core-ui-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-core-utils-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-fragment-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="jsr305-2.0.1" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="espresso-core-2.2.2" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="exposed-instrumentation-api-publish-0.5" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="rules-0.5" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="javax.annotation-api-1.2" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="javax.inject-1" level="project" /> |
|||
<orderEntry type="library" exported="" name="common-1.5.20" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-v4-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-media-compat-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="javawriter-2.1.1" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="hamcrest-core-1.3" level="project" /> |
|||
<orderEntry type="library" exported="" scope="TEST" name="junit-4.12" level="project" /> |
|||
<orderEntry type="library" exported="" name="recyclerview-v7-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-annotations-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="appcompat-v7-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-vector-drawable-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="support-compat-25.3.1" level="project" /> |
|||
<orderEntry type="library" exported="" name="animated-vector-drawable-25.3.1" level="project" /> |
|||
</component> |
|||
</module> |
@ -0,0 +1,17 @@ |
|||
# Add project specific ProGuard rules here. |
|||
# By default, the flags in this file are appended to flags specified |
|||
# in E:\Environment\android-sdk-windows/tools/proguard/proguard-android.txt |
|||
# You can edit the include path and order by changing the proguardFiles |
|||
# directive in build.gradle. |
|||
# |
|||
# For more details, see |
|||
# http://developer.android.com/guide/developing/tools/proguard.html |
|||
|
|||
# Add any project specific keep options here: |
|||
|
|||
# If your project uses WebView with JS, uncomment the following |
|||
# and specify the fully qualified class name to the JavaScript interface |
|||
# class: |
|||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview { |
|||
# public *; |
|||
#} |
@ -0,0 +1,26 @@ |
|||
package com.jiangdg.libusbcamera; |
|||
|
|||
import android.content.Context; |
|||
import android.support.test.InstrumentationRegistry; |
|||
import android.support.test.runner.AndroidJUnit4; |
|||
|
|||
import org.junit.Test; |
|||
import org.junit.runner.RunWith; |
|||
|
|||
import static org.junit.Assert.*; |
|||
|
|||
/** |
|||
* Instrumentation test, which will execute on an Android device. |
|||
* |
|||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a> |
|||
*/ |
|||
@RunWith(AndroidJUnit4.class) |
|||
public class ExampleInstrumentedTest { |
|||
@Test |
|||
public void useAppContext() throws Exception { |
|||
// Context of the app under test.
|
|||
Context appContext = InstrumentationRegistry.getTargetContext(); |
|||
|
|||
assertEquals("com.jiangdg.libusbcamera.test", appContext.getPackageName()); |
|||
} |
|||
} |
@ -0,0 +1,9 @@ |
|||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
|||
package="com.jiangdg.libusbcamera"> |
|||
|
|||
<application android:allowBackup="true" android:label="@string/app_name" |
|||
android:supportsRtl="true"> |
|||
|
|||
</application> |
|||
|
|||
</manifest> |
@ -0,0 +1,237 @@ |
|||
/* |
|||
* UVCCamera |
|||
* library and sample to access to UVC web camera on non-rooted Android device |
|||
* |
|||
* Copyright (c) 2014-2017 saki t_saki@serenegiant.com |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
* |
|||
* All files in the folder are under this Apache License, Version 2.0. |
|||
* Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder |
|||
* may have a different license, see the respective files. |
|||
*/ |
|||
|
|||
package com.serenegiant.usb; |
|||
|
|||
import android.app.Activity; |
|||
import android.app.AlertDialog; |
|||
import android.app.Dialog; |
|||
import android.app.DialogFragment; |
|||
import android.content.Context; |
|||
import android.content.DialogInterface; |
|||
import android.hardware.usb.UsbDevice; |
|||
import android.os.Bundle; |
|||
import android.view.LayoutInflater; |
|||
import android.view.View; |
|||
import android.view.View.OnClickListener; |
|||
import android.view.ViewGroup; |
|||
import android.widget.BaseAdapter; |
|||
import android.widget.Button; |
|||
import android.widget.CheckedTextView; |
|||
import android.widget.Spinner; |
|||
|
|||
import com.jiangdg.libusbcamera.R; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
public class CameraDialog extends DialogFragment { |
|||
private static final String TAG = CameraDialog.class.getSimpleName(); |
|||
|
|||
public interface CameraDialogParent { |
|||
public USBMonitor getUSBMonitor(); |
|||
public void onDialogResult(boolean canceled); |
|||
} |
|||
|
|||
/** |
|||
* Helper method |
|||
* @param parent FragmentActivity |
|||
* @return |
|||
*/ |
|||
public static CameraDialog showDialog(final Activity parent/* add parameters here if you need */) { |
|||
CameraDialog dialog = newInstance(/* add parameters here if you need */); |
|||
try { |
|||
dialog.show(parent.getFragmentManager(), TAG); |
|||
} catch (final IllegalStateException e) { |
|||
dialog = null; |
|||
} |
|||
return dialog; |
|||
} |
|||
|
|||
public static CameraDialog newInstance(/* add parameters here if you need */) { |
|||
final CameraDialog dialog = new CameraDialog(); |
|||
final Bundle args = new Bundle(); |
|||
// add parameters here if you need
|
|||
dialog.setArguments(args); |
|||
return dialog; |
|||
} |
|||
|
|||
protected USBMonitor mUSBMonitor; |
|||
private Spinner mSpinner; |
|||
private DeviceListAdapter mDeviceListAdapter; |
|||
|
|||
public CameraDialog(/* no arguments */) { |
|||
// Fragment need default constructor
|
|||
} |
|||
|
|||
@SuppressWarnings("deprecation") |
|||
@Override |
|||
public void onAttach(final Activity activity) { |
|||
super.onAttach(activity); |
|||
if (mUSBMonitor == null) |
|||
try { |
|||
mUSBMonitor = ((CameraDialogParent)activity).getUSBMonitor(); |
|||
} catch (final ClassCastException e) { |
|||
} catch (final NullPointerException e) { |
|||
} |
|||
if (mUSBMonitor == null) { |
|||
throw new ClassCastException(activity.toString() + " must implement CameraDialogParent#getUSBController"); |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public void onCreate(Bundle savedInstanceState) { |
|||
super.onCreate(savedInstanceState); |
|||
if (savedInstanceState == null) |
|||
savedInstanceState = getArguments(); |
|||
} |
|||
|
|||
@Override |
|||
public void onSaveInstanceState(final Bundle saveInstanceState) { |
|||
final Bundle args = getArguments(); |
|||
if (args != null) |
|||
saveInstanceState.putAll(args); |
|||
super.onSaveInstanceState(saveInstanceState); |
|||
} |
|||
|
|||
@Override |
|||
public Dialog onCreateDialog(final Bundle savedInstanceState) { |
|||
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); |
|||
builder.setView(initView()); |
|||
builder.setTitle(R.string.select); |
|||
builder.setPositiveButton(android.R.string.ok, mOnDialogClickListener); |
|||
builder.setNegativeButton(android.R.string.cancel , mOnDialogClickListener); |
|||
builder.setNeutralButton(R.string.refresh, null); |
|||
final Dialog dialog = builder.create(); |
|||
dialog.setCancelable(true); |
|||
dialog.setCanceledOnTouchOutside(true); |
|||
return dialog; |
|||
} |
|||
|
|||
/** |
|||
* create view that this fragment shows |
|||
* @return |
|||
*/ |
|||
private final View initView() { |
|||
final View rootView = getActivity().getLayoutInflater().inflate(R.layout.dialog_camera, null); |
|||
mSpinner = (Spinner)rootView.findViewById(R.id.spinner1); |
|||
final View empty = rootView.findViewById(android.R.id.empty); |
|||
mSpinner.setEmptyView(empty); |
|||
return rootView; |
|||
} |
|||
|
|||
|
|||
@Override |
|||
public void onResume() { |
|||
super.onResume(); |
|||
updateDevices(); |
|||
final Button button = (Button)getDialog().findViewById(android.R.id.button3); |
|||
if (button != null) { |
|||
button.setOnClickListener(mOnClickListener); |
|||
} |
|||
} |
|||
|
|||
private final OnClickListener mOnClickListener = new OnClickListener() { |
|||
@Override |
|||
public void onClick(final View v) { |
|||
switch (v.getId()) { |
|||
case android.R.id.button3: |
|||
updateDevices(); |
|||
break; |
|||
} |
|||
} |
|||
}; |
|||
|
|||
private final DialogInterface.OnClickListener mOnDialogClickListener = new DialogInterface.OnClickListener() { |
|||
@Override |
|||
public void onClick(final DialogInterface dialog, final int which) { |
|||
switch (which) { |
|||
case DialogInterface.BUTTON_POSITIVE: |
|||
final Object item = mSpinner.getSelectedItem(); |
|||
if (item instanceof UsbDevice) { |
|||
mUSBMonitor.requestPermission((UsbDevice)item); |
|||
((CameraDialogParent)getActivity()).onDialogResult(false); |
|||
} |
|||
break; |
|||
case DialogInterface.BUTTON_NEGATIVE: |
|||
((CameraDialogParent)getActivity()).onDialogResult(true); |
|||
break; |
|||
} |
|||
} |
|||
}; |
|||
|
|||
@Override |
|||
public void onCancel(final DialogInterface dialog) { |
|||
((CameraDialogParent)getActivity()).onDialogResult(true); |
|||
super.onCancel(dialog); |
|||
} |
|||
|
|||
public void updateDevices() { |
|||
// mUSBMonitor.dumpDevices();
|
|||
final List<DeviceFilter> filter = DeviceFilter.getDeviceFilters(getActivity(), R.xml.device_filter); |
|||
mDeviceListAdapter = new DeviceListAdapter(getActivity(), mUSBMonitor.getDeviceList(filter.get(0))); |
|||
mSpinner.setAdapter(mDeviceListAdapter); |
|||
} |
|||
|
|||
private static final class DeviceListAdapter extends BaseAdapter { |
|||
|
|||
private final LayoutInflater mInflater; |
|||
private final List<UsbDevice> mList; |
|||
|
|||
public DeviceListAdapter(final Context context, final List<UsbDevice>list) { |
|||
mInflater = LayoutInflater.from(context); |
|||
mList = list != null ? list : new ArrayList<UsbDevice>(); |
|||
} |
|||
|
|||
@Override |
|||
public int getCount() { |
|||
return mList.size(); |
|||
} |
|||
|
|||
@Override |
|||
public UsbDevice getItem(final int position) { |
|||
if ((position >= 0) && (position < mList.size())) |
|||
return mList.get(position); |
|||
else |
|||
return null; |
|||
} |
|||
|
|||
@Override |
|||
public long getItemId(final int position) { |
|||
return position; |
|||
} |
|||
|
|||
@Override |
|||
public View getView(final int position, View convertView, final ViewGroup parent) { |
|||
if (convertView == null) { |
|||
convertView = mInflater.inflate(R.layout.listitem_device, parent, false); |
|||
} |
|||
if (convertView instanceof CheckedTextView) { |
|||
final UsbDevice device = getItem(position); |
|||
((CheckedTextView)convertView).setText( |
|||
String.format("UVC Camera:(%x:%x:%s)", device.getVendorId(), device.getProductId(), device.getDeviceName())); |
|||
} |
|||
return convertView; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,527 @@ |
|||
/* |
|||
* UVCCamera |
|||
* library and sample to access to UVC web camera on non-rooted Android device |
|||
* |
|||
* Copyright (c) 2014-2017 saki t_saki@serenegiant.com |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
* |
|||
* All files in the folder are under this Apache License, Version 2.0. |
|||
* Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder |
|||
* may have a different license, see the respective files. |
|||
*/ |
|||
|
|||
package com.serenegiant.usb; |
|||
|
|||
import android.content.Context; |
|||
import android.content.res.Resources.NotFoundException; |
|||
import android.hardware.usb.UsbDevice; |
|||
import android.hardware.usb.UsbInterface; |
|||
import android.text.TextUtils; |
|||
import android.util.Log; |
|||
|
|||
import org.xmlpull.v1.XmlPullParser; |
|||
import org.xmlpull.v1.XmlPullParserException; |
|||
|
|||
import java.io.IOException; |
|||
import java.util.ArrayList; |
|||
import java.util.Collections; |
|||
import java.util.List; |
|||
|
|||
public final class DeviceFilter { |
|||
|
|||
private static final String TAG = "DeviceFilter"; |
|||
|
|||
// USB Vendor ID (or -1 for unspecified)
|
|||
public final int mVendorId; |
|||
// USB Product ID (or -1 for unspecified)
|
|||
public final int mProductId; |
|||
// USB device or interface class (or -1 for unspecified)
|
|||
public final int mClass; |
|||
// USB device subclass (or -1 for unspecified)
|
|||
public final int mSubclass; |
|||
// USB device protocol (or -1 for unspecified)
|
|||
public final int mProtocol; |
|||
// USB device manufacturer name string (or null for unspecified)
|
|||
public final String mManufacturerName; |
|||
// USB device product name string (or null for unspecified)
|
|||
public final String mProductName; |
|||
// USB device serial number string (or null for unspecified)
|
|||
public final String mSerialNumber; |
|||
// set true if specific device(s) should exclude
|
|||
public final boolean isExclude; |
|||
|
|||
public DeviceFilter(final int vid, final int pid, final int clasz, final int subclass, |
|||
final int protocol, final String manufacturer, final String product, final String serialNum) { |
|||
this(vid, pid, clasz, subclass, protocol, manufacturer, product, serialNum, false); |
|||
} |
|||
|
|||
public DeviceFilter(final int vid, final int pid, final int clasz, final int subclass, |
|||
final int protocol, final String manufacturer, final String product, final String serialNum, final boolean isExclude) { |
|||
mVendorId = vid; |
|||
mProductId = pid; |
|||
mClass = clasz; |
|||
mSubclass = subclass; |
|||
mProtocol = protocol; |
|||
mManufacturerName = manufacturer; |
|||
mProductName = product; |
|||
mSerialNumber = serialNum; |
|||
this.isExclude = isExclude; |
|||
/* Log.i(TAG, String.format("vendorId=0x%04x,productId=0x%04x,class=0x%02x,subclass=0x%02x,protocol=0x%02x", |
|||
mVendorId, mProductId, mClass, mSubclass, mProtocol)); */ |
|||
} |
|||
|
|||
public DeviceFilter(final UsbDevice device) { |
|||
this(device, false); |
|||
} |
|||
|
|||
public DeviceFilter(final UsbDevice device, final boolean isExclude) { |
|||
mVendorId = device.getVendorId(); |
|||
mProductId = device.getProductId(); |
|||
mClass = device.getDeviceClass(); |
|||
mSubclass = device.getDeviceSubclass(); |
|||
mProtocol = device.getDeviceProtocol(); |
|||
mManufacturerName = null; // device.getManufacturerName();
|
|||
mProductName = null; // device.getProductName();
|
|||
mSerialNumber = null; // device.getSerialNumber();
|
|||
this.isExclude = isExclude; |
|||
/* Log.i(TAG, String.format("vendorId=0x%04x,productId=0x%04x,class=0x%02x,subclass=0x%02x,protocol=0x%02x", |
|||
mVendorId, mProductId, mClass, mSubclass, mProtocol)); */ |
|||
} |
|||
|
|||
/** |
|||
* 指定したxmlリソースからDeviceFilterリストを生成する |
|||
* @param context |
|||
* @param deviceFilterXmlId |
|||
* @return |
|||
*/ |
|||
public static List<DeviceFilter> getDeviceFilters(final Context context, final int deviceFilterXmlId) { |
|||
final XmlPullParser parser = context.getResources().getXml(deviceFilterXmlId); |
|||
final List<DeviceFilter> deviceFilters = new ArrayList<DeviceFilter>(); |
|||
try { |
|||
int eventType = parser.getEventType(); |
|||
while (eventType != XmlPullParser.END_DOCUMENT) { |
|||
if (eventType == XmlPullParser.START_TAG) { |
|||
final DeviceFilter deviceFilter = readEntryOne(context, parser); |
|||
if (deviceFilter != null) { |
|||
deviceFilters.add(deviceFilter); |
|||
} |
|||
} |
|||
eventType = parser.next(); |
|||
} |
|||
} catch (final XmlPullParserException e) { |
|||
Log.d(TAG, "XmlPullParserException", e); |
|||
} catch (final IOException e) { |
|||
Log.d(TAG, "IOException", e); |
|||
} |
|||
|
|||
return Collections.unmodifiableList(deviceFilters); |
|||
} |
|||
|
|||
/** |
|||
* read as integer values with default value from xml(w/o exception throws) |
|||
* resource integer id is also resolved into integer |
|||
* @param parser |
|||
* @param namespace |
|||
* @param name |
|||
* @param defaultValue |
|||
* @return |
|||
*/ |
|||
private static final int getAttributeInteger(final Context context, final XmlPullParser parser, final String namespace, final String name, final int defaultValue) { |
|||
int result = defaultValue; |
|||
try { |
|||
String v = parser.getAttributeValue(namespace, name); |
|||
if (!TextUtils.isEmpty(v) && v.startsWith("@")) { |
|||
final String r = v.substring(1); |
|||
final int resId = context.getResources().getIdentifier(r, null, context.getPackageName()); |
|||
if (resId > 0) { |
|||
result = context.getResources().getInteger(resId); |
|||
} |
|||
} else { |
|||
int radix = 10; |
|||
if (v != null && v.length() > 2 && v.charAt(0) == '0' && |
|||
(v.charAt(1) == 'x' || v.charAt(1) == 'X')) { |
|||
// allow hex values starting with 0x or 0X
|
|||
radix = 16; |
|||
v = v.substring(2); |
|||
} |
|||
result = Integer.parseInt(v, radix); |
|||
} |
|||
} catch (final NotFoundException e) { |
|||
result = defaultValue; |
|||
} catch (final NumberFormatException e) { |
|||
result = defaultValue; |
|||
} catch (final NullPointerException e) { |
|||
result = defaultValue; |
|||
} |
|||
return result; |
|||
} |
|||
|
|||
/** |
|||
* read as boolean values with default value from xml(w/o exception throws) |
|||
* resource boolean id is also resolved into boolean |
|||
* if the value is zero, return false, if the value is non-zero integer, return true |
|||
* @param context |
|||
* @param parser |
|||
* @param namespace |
|||
* @param name |
|||
* @param defaultValue |
|||
* @return |
|||
*/ |
|||
private static final boolean getAttributeBoolean(final Context context, final XmlPullParser parser, final String namespace, final String name, final boolean defaultValue) { |
|||
boolean result = defaultValue; |
|||
try { |
|||
String v = parser.getAttributeValue(namespace, name); |
|||
if ("TRUE".equalsIgnoreCase(v)) { |
|||
result = true; |
|||
} else if ("FALSE".equalsIgnoreCase(v)) { |
|||
result = false; |
|||
} else if (!TextUtils.isEmpty(v) && v.startsWith("@")) { |
|||
final String r = v.substring(1); |
|||
final int resId = context.getResources().getIdentifier(r, null, context.getPackageName()); |
|||
if (resId > 0) { |
|||
result = context.getResources().getBoolean(resId); |
|||
} |
|||
} else { |
|||
int radix = 10; |
|||
if (v != null && v.length() > 2 && v.charAt(0) == '0' && |
|||
(v.charAt(1) == 'x' || v.charAt(1) == 'X')) { |
|||
// allow hex values starting with 0x or 0X
|
|||
radix = 16; |
|||
v = v.substring(2); |
|||
} |
|||
final int val = Integer.parseInt(v, radix); |
|||
result = val != 0; |
|||
} |
|||
} catch (final NotFoundException e) { |
|||
result = defaultValue; |
|||
} catch (final NumberFormatException e) { |
|||
result = defaultValue; |
|||
} catch (final NullPointerException e) { |
|||
result = defaultValue; |
|||
} |
|||
return result; |
|||
} |
|||
|
|||
/** |
|||
* read as String attribute with default value from xml(w/o exception throws) |
|||
* resource string id is also resolved into string |
|||
* @param parser |
|||
* @param namespace |
|||
* @param name |
|||
* @param defaultValue |
|||
* @return |
|||
*/ |
|||
private static final String getAttributeString(final Context context, final XmlPullParser parser, final String namespace, final String name, final String defaultValue) { |
|||
String result = defaultValue; |
|||
try { |
|||
result = parser.getAttributeValue(namespace, name); |
|||
if (result == null) |
|||
result = defaultValue; |
|||
if (!TextUtils.isEmpty(result) && result.startsWith("@")) { |
|||
final String r = result.substring(1); |
|||
final int resId = context.getResources().getIdentifier(r, null, context.getPackageName()); |
|||
if (resId > 0) |
|||
result = context.getResources().getString(resId); |
|||
} |
|||
} catch (final NotFoundException e) { |
|||
result = defaultValue; |
|||
} catch (final NumberFormatException e) { |
|||
result = defaultValue; |
|||
} catch (final NullPointerException e) { |
|||
result = defaultValue; |
|||
} |
|||
return result; |
|||
} |
|||
|
|||
public static DeviceFilter readEntryOne(final Context context, final XmlPullParser parser) |
|||
throws XmlPullParserException, IOException { |
|||
int vendorId = -1; |
|||
int productId = -1; |
|||
int deviceClass = -1; |
|||
int deviceSubclass = -1; |
|||
int deviceProtocol = -1; |
|||
boolean exclude = false; |
|||
String manufacturerName = null; |
|||
String productName = null; |
|||
String serialNumber = null; |
|||
boolean hasValue = false; |
|||
|
|||
String tag; |
|||
int eventType = parser.getEventType(); |
|||
while (eventType != XmlPullParser.END_DOCUMENT) { |
|||
tag = parser.getName(); |
|||
if (!TextUtils.isEmpty(tag) && (tag.equalsIgnoreCase("usb-device"))) { |
|||
if (eventType == XmlPullParser.START_TAG) { |
|||
hasValue = true; |
|||
vendorId = getAttributeInteger(context, parser, null, "vendor-id", -1); |
|||
if (vendorId == -1) { |
|||
vendorId = getAttributeInteger(context, parser, null, "vendorId", -1); |
|||
if (vendorId == -1) |
|||
vendorId = getAttributeInteger(context, parser, null, "venderId", -1); |
|||
} |
|||
productId = getAttributeInteger(context, parser, null, "product-id", -1); |
|||
if (productId == -1) |
|||
productId = getAttributeInteger(context, parser, null, "productId", -1); |
|||
deviceClass = getAttributeInteger(context, parser, null, "class", -1); |
|||
deviceSubclass = getAttributeInteger(context, parser, null, "subclass", -1); |
|||
deviceProtocol = getAttributeInteger(context, parser, null, "protocol", -1); |
|||
manufacturerName = getAttributeString(context, parser, null, "manufacturer-name", null); |
|||
if (TextUtils.isEmpty(manufacturerName)) |
|||
manufacturerName = getAttributeString(context, parser, null, "manufacture", null); |
|||
productName = getAttributeString(context, parser, null, "product-name", null); |
|||
if (TextUtils.isEmpty(productName)) |
|||
productName = getAttributeString(context, parser, null, "product", null); |
|||
serialNumber = getAttributeString(context, parser, null, "serial-number", null); |
|||
if (TextUtils.isEmpty(serialNumber)) |
|||
serialNumber = getAttributeString(context, parser, null, "serial", null); |
|||
exclude = getAttributeBoolean(context, parser, null, "exclude", false); |
|||
} else if (eventType == XmlPullParser.END_TAG) { |
|||
if (hasValue) { |
|||
return new DeviceFilter(vendorId, productId, deviceClass, |
|||
deviceSubclass, deviceProtocol, manufacturerName, productName, |
|||
serialNumber, exclude); |
|||
} |
|||
} |
|||
} |
|||
eventType = parser.next(); |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
/* public void write(XmlSerializer serializer) throws IOException { |
|||
serializer.startTag(null, "usb-device"); |
|||
if (mVendorId != -1) { |
|||
serializer |
|||
.attribute(null, "vendor-id", Integer.toString(mVendorId)); |
|||
} |
|||
if (mProductId != -1) { |
|||
serializer.attribute(null, "product-id", |
|||
Integer.toString(mProductId)); |
|||
} |
|||
if (mClass != -1) { |
|||
serializer.attribute(null, "class", Integer.toString(mClass)); |
|||
} |
|||
if (mSubclass != -1) { |
|||
serializer.attribute(null, "subclass", Integer.toString(mSubclass)); |
|||
} |
|||
if (mProtocol != -1) { |
|||
serializer.attribute(null, "protocol", Integer.toString(mProtocol)); |
|||
} |
|||
if (mManufacturerName != null) { |
|||
serializer.attribute(null, "manufacturer-name", mManufacturerName); |
|||
} |
|||
if (mProductName != null) { |
|||
serializer.attribute(null, "product-name", mProductName); |
|||
} |
|||
if (mSerialNumber != null) { |
|||
serializer.attribute(null, "serial-number", mSerialNumber); |
|||
} |
|||
serializer.attribute(null, "serial-number", Boolean.toString(isExclude)); |
|||
serializer.endTag(null, "usb-device"); |
|||
} */ |
|||
|
|||
/** |
|||
* 指定したクラス・サブクラス・プロトコルがこのDeviceFilterとマッチするかどうかを返す |
|||
* mExcludeフラグは別途#isExcludeか自前でチェックすること |
|||
* @param clasz |
|||
* @param subclass |
|||
* @param protocol |
|||
* @return |
|||
*/ |
|||
private boolean matches(final int clasz, final int subclass, final int protocol) { |
|||
return ((mClass == -1 || clasz == mClass) |
|||
&& (mSubclass == -1 || subclass == mSubclass) && (mProtocol == -1 || protocol == mProtocol)); |
|||
} |
|||
|
|||
/** |
|||
* 指定したUsbDeviceがこのDeviceFilterにマッチするかどうかを返す |
|||
* mExcludeフラグは別途#isExcludeか自前でチェックすること |
|||
* @param device |
|||
* @return |
|||
*/ |
|||
public boolean matches(final UsbDevice device) { |
|||
if (mVendorId != -1 && device.getVendorId() != mVendorId) { |
|||
return false; |
|||
} |
|||
if (mProductId != -1 && device.getProductId() != mProductId) { |
|||
return false; |
|||
} |
|||
/* if (mManufacturerName != null && device.getManufacturerName() == null) |
|||
return false; |
|||
if (mProductName != null && device.getProductName() == null) |
|||
return false; |
|||
if (mSerialNumber != null && device.getSerialNumber() == null) |
|||
return false; |
|||
if (mManufacturerName != null && device.getManufacturerName() != null |
|||
&& !mManufacturerName.equals(device.getManufacturerName())) |
|||
return false; |
|||
if (mProductName != null && device.getProductName() != null |
|||
&& !mProductName.equals(device.getProductName())) |
|||
return false; |
|||
if (mSerialNumber != null && device.getSerialNumber() != null |
|||
&& !mSerialNumber.equals(device.getSerialNumber())) |
|||
return false; */ |
|||
|
|||
// check device class/subclass/protocol
|
|||
if (matches(device.getDeviceClass(), device.getDeviceSubclass(), device.getDeviceProtocol())) { |
|||
return true; |
|||
} |
|||
|
|||
// if device doesn't match, check the interfaces
|
|||
final int count = device.getInterfaceCount(); |
|||
for (int i = 0; i < count; i++) { |
|||
final UsbInterface intf = device.getInterface(i); |
|||
if (matches(intf.getInterfaceClass(), intf.getInterfaceSubclass(), intf.getInterfaceProtocol())) { |
|||
return true; |
|||
} |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
|
|||
/** |
|||
* このDeviceFilterに一致してかつmExcludeがtrueならtrueを返す |
|||
* @param device |
|||
* @return |
|||
*/ |
|||
public boolean isExclude(final UsbDevice device) { |
|||
return isExclude && matches(device); |
|||
} |
|||
|
|||
/** |
|||
* これって要らんかも, equalsでできる気が |
|||
* @param f |
|||
* @return |
|||
*/ |
|||
public boolean matches(final DeviceFilter f) { |
|||
if (isExclude != f.isExclude) { |
|||
return false; |
|||
} |
|||
if (mVendorId != -1 && f.mVendorId != mVendorId) { |
|||
return false; |
|||
} |
|||
if (mProductId != -1 && f.mProductId != mProductId) { |
|||
return false; |
|||
} |
|||
if (f.mManufacturerName != null && mManufacturerName == null) { |
|||
return false; |
|||
} |
|||
if (f.mProductName != null && mProductName == null) { |
|||
return false; |
|||
} |
|||
if (f.mSerialNumber != null && mSerialNumber == null) { |
|||
return false; |
|||
} |
|||
if (mManufacturerName != null && f.mManufacturerName != null |
|||
&& !mManufacturerName.equals(f.mManufacturerName)) { |
|||
return false; |
|||
} |
|||
if (mProductName != null && f.mProductName != null |
|||
&& !mProductName.equals(f.mProductName)) { |
|||
return false; |
|||
} |
|||
if (mSerialNumber != null && f.mSerialNumber != null |
|||
&& !mSerialNumber.equals(f.mSerialNumber)) { |
|||
return false; |
|||
} |
|||
|
|||
// check device class/subclass/protocol
|
|||
return matches(f.mClass, f.mSubclass, f.mProtocol); |
|||
} |
|||
|
|||
@Override |
|||
public boolean equals(final Object obj) { |
|||
// can't compare if we have wildcard strings
|
|||
if (mVendorId == -1 || mProductId == -1 || mClass == -1 |
|||
|| mSubclass == -1 || mProtocol == -1) { |
|||
return false; |
|||
} |
|||
if (obj instanceof DeviceFilter) { |
|||
final DeviceFilter filter = (DeviceFilter) obj; |
|||
|
|||
if (filter.mVendorId != mVendorId |
|||
|| filter.mProductId != mProductId |
|||
|| filter.mClass != mClass || filter.mSubclass != mSubclass |
|||
|| filter.mProtocol != mProtocol) { |
|||
return false; |
|||
} |
|||
if ((filter.mManufacturerName != null && mManufacturerName == null) |
|||
|| (filter.mManufacturerName == null && mManufacturerName != null) |
|||
|| (filter.mProductName != null && mProductName == null) |
|||
|| (filter.mProductName == null && mProductName != null) |
|||
|| (filter.mSerialNumber != null && mSerialNumber == null) |
|||
|| (filter.mSerialNumber == null && mSerialNumber != null)) { |
|||
return false; |
|||
} |
|||
if ((filter.mManufacturerName != null && mManufacturerName != null && !mManufacturerName |
|||
.equals(filter.mManufacturerName)) |
|||
|| (filter.mProductName != null && mProductName != null && !mProductName |
|||
.equals(filter.mProductName)) |
|||
|| (filter.mSerialNumber != null && mSerialNumber != null && !mSerialNumber |
|||
.equals(filter.mSerialNumber))) { |
|||
return false; |
|||
} |
|||
return (filter.isExclude != isExclude); |
|||
} |
|||
if (obj instanceof UsbDevice) { |
|||
final UsbDevice device = (UsbDevice) obj; |
|||
if (isExclude |
|||
|| (device.getVendorId() != mVendorId) |
|||
|| (device.getProductId() != mProductId) |
|||
|| (device.getDeviceClass() != mClass) |
|||
|| (device.getDeviceSubclass() != mSubclass) |
|||
|| (device.getDeviceProtocol() != mProtocol) ) { |
|||
return false; |
|||
} |
|||
/* if ((mManufacturerName != null && device.getManufacturerName() == null) |
|||
|| (mManufacturerName == null && device |
|||
.getManufacturerName() != null) |
|||
|| (mProductName != null && device.getProductName() == null) |
|||
|| (mProductName == null && device.getProductName() != null) |
|||
|| (mSerialNumber != null && device.getSerialNumber() == null) |
|||
|| (mSerialNumber == null && device.getSerialNumber() != null)) { |
|||
return (false); |
|||
} */ |
|||
/* if ((device.getManufacturerName() != null && !mManufacturerName |
|||
.equals(device.getManufacturerName())) |
|||
|| (device.getProductName() != null && !mProductName |
|||
.equals(device.getProductName())) |
|||
|| (device.getSerialNumber() != null && !mSerialNumber |
|||
.equals(device.getSerialNumber()))) { |
|||
return (false); |
|||
} */ |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
@Override |
|||
public int hashCode() { |
|||
return (((mVendorId << 16) | mProductId) ^ ((mClass << 16) |
|||
| (mSubclass << 8) | mProtocol)); |
|||
} |
|||
|
|||
@Override |
|||
public String toString() { |
|||
return "DeviceFilter[mVendorId=" + mVendorId + ",mProductId=" |
|||
+ mProductId + ",mClass=" + mClass + ",mSubclass=" + mSubclass |
|||
+ ",mProtocol=" + mProtocol |
|||
+ ",mManufacturerName=" + mManufacturerName |
|||
+ ",mProductName=" + mProductName |
|||
+ ",mSerialNumber=" + mSerialNumber |
|||
+ ",isExclude=" + isExclude |
|||
+ "]"; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,5 @@ |
|||
package com.serenegiant.usb; |
|||
|
|||
public interface IButtonCallback { |
|||
void onButton(int button, int state); |
|||
} |
@ -0,0 +1,46 @@ |
|||
/* |
|||
* UVCCamera |
|||
* library and sample to access to UVC web camera on non-rooted Android device |
|||
* |
|||
* Copyright (c) 2014-2017 saki t_saki@serenegiant.com |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
* |
|||
* All files in the folder are under this Apache License, Version 2.0. |
|||
* Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder |
|||
* may have a different license, see the respective files. |
|||
*/ |
|||
|
|||
package com.serenegiant.usb; |
|||
|
|||
import java.nio.ByteBuffer; |
|||
|
|||
/** |
|||
* Callback interface for UVCCamera class |
|||
* If you need frame data as ByteBuffer, you can use this callback interface with UVCCamera#setFrameCallback |
|||
*/ |
|||
public interface IFrameCallback { |
|||
/** |
|||
* This method is called from native library via JNI on the same thread as UVCCamera#startCapture. |
|||
* You can use both UVCCamera#startCapture and #setFrameCallback |
|||
* but it is better to use either for better performance. |
|||
* You can also pass pixel format type to UVCCamera#setFrameCallback for this method. |
|||
* Some frames may drops if this method takes a time. |
|||
* When you use some color format like NV21, this library never execute color space conversion, |
|||
* just execute pixel format conversion. If you want to get same result as on screen, please try to |
|||
* consider to get images via texture(SurfaceTexture) and read pixel buffer from it using OpenGL|ES2/3 |
|||
* instead of using IFrameCallback(this way is much efficient in most case than using IFrameCallback). |
|||
* @param frame this is direct ByteBuffer from JNI layer and you should handle it's byte order and limitation. |
|||
*/ |
|||
public void onFrame(ByteBuffer frame); |
|||
} |
@ -0,0 +1,7 @@ |
|||
package com.serenegiant.usb; |
|||
|
|||
import java.nio.ByteBuffer; |
|||
|
|||
public interface IStatusCallback { |
|||
void onStatus(int statusClass, int event, int selector, int statusAttribute, ByteBuffer data); |
|||
} |
@ -0,0 +1,302 @@ |
|||
/* |
|||
* UVCCamera |
|||
* library and sample to access to UVC web camera on non-rooted Android device |
|||
* |
|||
* Copyright (c) 2014-2017 saki t_saki@serenegiant.com |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
* |
|||
* All files in the folder are under this Apache License, Version 2.0. |
|||
* Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder |
|||
* may have a different license, see the respective files. |
|||
*/ |
|||
|
|||
package com.serenegiant.usb; |
|||
|
|||
import android.os.Parcel; |
|||
import android.os.Parcelable; |
|||
|
|||
import java.util.Locale; |
|||
|
|||
public class Size implements Parcelable { |
|||
//
|
|||
/** |
|||
* native側のuvc_raw_format_tの値, こっちは主にlibuvc用 |
|||
* 9999 is still image |
|||
*/ |
|||
public int type; |
|||
/** |
|||
* native側のraw_frame_tの値, androusb用, |
|||
* libuvcは対応していない |
|||
*/ |
|||
public int frame_type; |
|||
public int index; |
|||
public int width; |
|||
public int height; |
|||
public int frameIntervalType; |
|||
public int frameIntervalIndex; |
|||
public int[] intervals; |
|||
// ここ以下はframeIntervalTypeとintervalsから#updateFrameRateで計算する
|
|||
public float[] fps; |
|||
private String frameRates; |
|||
|
|||
/** |
|||
* コンストラクタ |
|||
* @param _type native側のraw_format_tの値, ただし9999は静止画 |
|||
* @param _frame_type native側のraw_frame_tの値 |
|||
* @param _index |
|||
* @param _width |
|||
* @param _height |
|||
*/ |
|||
public Size(final int _type, final int _frame_type, final int _index, final int _width, final int _height) { |
|||
type = _type; |
|||
frame_type = _frame_type; |
|||
index = _index; |
|||
width = _width; |
|||
height = _height; |
|||
frameIntervalType = -1; |
|||
frameIntervalIndex = 0; |
|||
intervals = null; |
|||
updateFrameRate(); |
|||
} |
|||
|
|||
/** |
|||
* コンストラクタ |
|||
* @param _type native側のraw_format_tの値, ただし9999は静止画 |
|||
* @param _frame_type native側のraw_frame_tの値 |
|||
* @param _index |
|||
* @param _width |
|||
* @param _height |
|||
* @param _min_intervals |
|||
* @param _max_intervals |
|||
*/ |
|||
public Size(final int _type, final int _frame_type, final int _index, final int _width, final int _height, final int _min_intervals, final int _max_intervals, final int _step) { |
|||
type = _type; |
|||
frame_type = _frame_type; |
|||
index = _index; |
|||
width = _width; |
|||
height = _height; |
|||
frameIntervalType = 0; |
|||
frameIntervalIndex = 0; |
|||
intervals = new int[3]; |
|||
intervals[0] = _min_intervals; |
|||
intervals[1] = _max_intervals; |
|||
intervals[2] = _step; |
|||
updateFrameRate(); |
|||
} |
|||
|
|||
/** |
|||
* コンストラクタ |
|||
* @param _type native側のraw_format_tの値, ただし9999は静止画 |
|||
* @param _frame_type native側のraw_frame_tの値 |
|||
* @param _index |
|||
* @param _width |
|||
* @param _height |
|||
* @param _intervals |
|||
*/ |
|||
public Size(final int _type, final int _frame_type, final int _index, final int _width, final int _height, final int[] _intervals) { |
|||
type = _type; |
|||
frame_type = _frame_type; |
|||
index = _index; |
|||
width = _width; |
|||
height = _height; |
|||
final int n = _intervals != null ? _intervals.length : -1; |
|||
if (n > 0) { |
|||
frameIntervalType = n; |
|||
intervals = new int[n]; |
|||
System.arraycopy(_intervals, 0, intervals, 0, n); |
|||
} else { |
|||
frameIntervalType = -1; |
|||
intervals = null; |
|||
} |
|||
frameIntervalIndex = 0; |
|||
updateFrameRate(); |
|||
} |
|||
|
|||
/** |
|||
* コピーコンストラクタ |
|||
* @param other |
|||
*/ |
|||
public Size(final Size other) { |
|||
type = other.type; |
|||
frame_type = other.frame_type; |
|||
index = other.index; |
|||
width = other.width; |
|||
height = other.height; |
|||
frameIntervalType = other.frameIntervalType; |
|||
frameIntervalIndex = other.frameIntervalIndex; |
|||
final int n = other.intervals != null ? other.intervals.length : -1; |
|||
if (n > 0) { |
|||
intervals = new int[n]; |
|||
System.arraycopy(other.intervals, 0, intervals, 0, n); |
|||
} else { |
|||
intervals = null; |
|||
} |
|||
updateFrameRate(); |
|||
} |
|||
|
|||
private Size(final Parcel source) { |
|||
// 読み取り順はwriteToParcelでの書き込み順と同じでないとダメ
|
|||
type = source.readInt(); |
|||
frame_type = source.readInt(); |
|||
index = source.readInt(); |
|||
width = source.readInt(); |
|||
height = source.readInt(); |
|||
frameIntervalType = source.readInt(); |
|||
frameIntervalIndex = source.readInt(); |
|||
if (frameIntervalType >= 0) { |
|||
if (frameIntervalType > 0) { |
|||
intervals = new int[frameIntervalType]; |
|||
} else { |
|||
intervals = new int[3]; |
|||
} |
|||
source.readIntArray(intervals); |
|||
} else { |
|||
intervals = null; |
|||
} |
|||
updateFrameRate(); |
|||
} |
|||
|
|||
public Size set(final Size other) { |
|||
if (other != null) { |
|||
type = other.type; |
|||
frame_type = other.frame_type; |
|||
index = other.index; |
|||
width = other.width; |
|||
height = other.height; |
|||
frameIntervalType = other.frameIntervalType; |
|||
frameIntervalIndex = other.frameIntervalIndex; |
|||
final int n = other.intervals != null ? other.intervals.length : -1; |
|||
if (n > 0) { |
|||
intervals = new int[n]; |
|||
System.arraycopy(other.intervals, 0, intervals, 0, n); |
|||
} else { |
|||
intervals = null; |
|||
} |
|||
updateFrameRate(); |
|||
} |
|||
return this; |
|||
} |
|||
|
|||
public float getCurrentFrameRate() throws IllegalStateException { |
|||
final int n = fps != null ? fps.length : 0; |
|||
if ((frameIntervalIndex >= 0) && (frameIntervalIndex < n)) { |
|||
return fps[frameIntervalIndex]; |
|||
} |
|||
throw new IllegalStateException("unknown frame rate or not ready"); |
|||
} |
|||
|
|||
public void setCurrentFrameRate(final float frameRate) { |
|||
// 一番近いのを選ぶ
|
|||
int index = -1; |
|||
final int n = fps != null ? fps.length : 0; |
|||
for (int i = 0; i < n; i++) { |
|||
if (fps[i] <= frameRate) { |
|||
index = i; |
|||
break; |
|||
} |
|||
} |
|||
frameIntervalIndex = index; |
|||
} |
|||
|
|||
@Override |
|||
public int describeContents() { |
|||
return 0; |
|||
} |
|||
|
|||
@Override |
|||
public void writeToParcel(final Parcel dest, final int flags) { |
|||
dest.writeInt(type); |
|||
dest.writeInt(frame_type); |
|||
dest.writeInt(index); |
|||
dest.writeInt(width); |
|||
dest.writeInt(height); |
|||
dest.writeInt(frameIntervalType); |
|||
dest.writeInt(frameIntervalIndex); |
|||
if (intervals != null) { |
|||
dest.writeIntArray(intervals); |
|||
} |
|||
} |
|||
|
|||
public void updateFrameRate() { |
|||
final int n = frameIntervalType; |
|||
if (n > 0) { |
|||
fps = new float[n]; |
|||
for (int i = 0; i < n; i++) { |
|||
final float _fps = fps[i] = 10000000.0f / intervals[i]; |
|||
} |
|||
} else if (n == 0) { |
|||
try { |
|||
final int min = Math.min(intervals[0], intervals[1]); |
|||
final int max = Math.max(intervals[0], intervals[1]); |
|||
final int step = intervals[2]; |
|||
if (step > 0) { |
|||
int m = 0; |
|||
for (int i = min; i <= max; i+= step) { m++; } |
|||
fps = new float[m]; |
|||
m = 0; |
|||
for (int i = min; i <= max; i+= step) { |
|||
final float _fps = fps[m++] = 10000000.0f / i; |
|||
} |
|||
} else { |
|||
final float max_fps = 10000000.0f / min; |
|||
int m = 0; |
|||
for (float fps = 10000000.0f / min; fps <= max_fps; fps += 1.0f) { m++; } |
|||
fps = new float[m]; |
|||
m = 0; |
|||
for (float fps = 10000000.0f / min; fps <= max_fps; fps += 1.0f) { |
|||
this.fps[m++] = fps; |
|||
} |
|||
} |
|||
} catch (final Exception e) { |
|||
// ignore, なんでかminとmaxが0になってるんちゃうかな
|
|||
fps = null; |
|||
} |
|||
} |
|||
final int m = fps != null ? fps.length : 0; |
|||
final StringBuilder sb = new StringBuilder(); |
|||
sb.append("["); |
|||
for (int i = 0; i < m; i++) { |
|||
sb.append(String.format(Locale.US, "%4.1f", fps[i])); |
|||
if (i < m-1) { |
|||
sb.append(","); |
|||
} |
|||
} |
|||
sb.append("]"); |
|||
frameRates = sb.toString(); |
|||
if (frameIntervalIndex > m) { |
|||
frameIntervalIndex = 0; |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public String toString() { |
|||
float frame_rate = 0.0f; |
|||
try { |
|||
frame_rate = getCurrentFrameRate(); |
|||
} catch (final Exception e) { |
|||
} |
|||
return String.format(Locale.US, "Size(%dx%d@%4.1f,type:%d,frame:%d,index:%d,%s)", width, height, frame_rate, type, frame_type, index, frameRates); |
|||
} |
|||
|
|||
public static final Creator<Size> CREATOR = new Creator<Size>() { |
|||
@Override |
|||
public Size createFromParcel(final Parcel source) { |
|||
return new Size(source); |
|||
} |
|||
@Override |
|||
public Size[] newArray(final int size) { |
|||
return new Size[size]; |
|||
} |
|||
}; |
|||
} |
File diff suppressed because it is too large
@ -0,0 +1,859 @@ |
|||
/* |
|||
* UVCCamera |
|||
* library and sample to access to UVC web camera on non-rooted Android device |
|||
* |
|||
* Copyright (c) 2014-2017 saki t_saki@serenegiant.com |
|||
* |
|||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|||
* you may not use this file except in compliance with the License. |
|||
* You may obtain a copy of the License at |
|||
* |
|||
* http://www.apache.org/licenses/LICENSE-2.0
|
|||
* |
|||
* Unless required by applicable law or agreed to in writing, software |
|||
* distributed under the License is distributed on an "AS IS" BASIS, |
|||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|||
* See the License for the specific language governing permissions and |
|||
* limitations under the License. |
|||
* |
|||
* All files in the folder are under this Apache License, Version 2.0. |
|||
* Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder |
|||
* may have a different license, see the respective files. |
|||
*/ |
|||
|
|||
package com.serenegiant.usb; |
|||
|
|||
import android.util.SparseArray; |
|||
|
|||
public class USBVendorId { |
|||
private static final SparseArray<String> IDS = new SparseArray<String>(); |
|||
|
|||
public static String vendorName(final int vendor_id) { |
|||
return IDS.get(vendor_id); |
|||
} |
|||
|
|||
static { |
|||
IDS.put(10006, "YUEN DA ELECTRONIC PRODUCTS FACTORY"); |
|||
IDS.put(10013, "Gionee Communication Equipment Co., Ltd. ShenZhen"); |
|||
IDS.put(10022, "Universal Electronics Inc. (dba: TVIEW)"); |
|||
IDS.put(1003, "Atmel Corporation"); |
|||
IDS.put(1006, "Mitsumi"); |
|||
IDS.put(1008, "HP Inc."); |
|||
IDS.put(10112, "M31 Technology Corp."); |
|||
IDS.put(10113, "Liteconn Co., Ltd."); |
|||
IDS.put(10121, "Suzhou WEIJU Electronics Technology Co., Ltd."); |
|||
IDS.put(10144, "Mondokey Limited"); |
|||
IDS.put(10149, "Advantest Corporation"); |
|||
IDS.put(10150, "iRobot Corporation"); |
|||
IDS.put(1020, "Elitegroup Computer Systems"); |
|||
IDS.put(1021, "Xilinx Inc."); |
|||
IDS.put(10226, "Sibridge Tech."); |
|||
IDS.put(1026, "ALi Corporation"); |
|||
IDS.put(1027, "Future Technology Devices International Limited"); |
|||
IDS.put(10275, "Dongguan Jiumutong Industry Co., Ltd."); |
|||
IDS.put(10289, "Power Integrations"); |
|||
IDS.put(10291, "Oculus VR, Inc."); |
|||
IDS.put(10300, "HIGH TEK HARNESS ENTERPRISE CO., LTD."); |
|||
IDS.put(10316, "Full in Hope Co., Ltd."); |
|||
IDS.put(1032, "Quanta Computer Inc."); |
|||
IDS.put(10329, "Viconn Technology (HK) Co., Ltd."); |
|||
IDS.put(1033, "NEC Corporation"); |
|||
IDS.put(1035, "Weltrend Semiconductor"); |
|||
IDS.put(1037, "VIA Technologies, Inc."); |
|||
IDS.put(10374, "Seeed Technology Co., Ltd."); |
|||
IDS.put(10375, "Specwerkz"); |
|||
IDS.put(1038, "MCCI Corporation"); |
|||
IDS.put(10398, "Esselte Leitz GmbH & Co. KG"); |
|||
IDS.put(10406, "E-SEEK Inc."); |
|||
IDS.put(1041, "BUFFALO INC."); |
|||
IDS.put(10423, "Pleora Technologies Inc."); |
|||
IDS.put(10431, "Vitetech Int'l Co., Ltd."); |
|||
IDS.put(1044, "Giga-Byte Technology Co., Ltd."); |
|||
IDS.put(10446, "Changzhou Shi Wujin Miqi East Electronic Co., Ltd."); |
|||
IDS.put(10457, "Shenzhen Ourconn Technology Co., Ltd."); |
|||
IDS.put(10458, "G.SKILL Int'l Enterprice Co., Ltd."); |
|||
IDS.put(1046, "Nuvoton Technology Corp."); |
|||
IDS.put(10466, "Surplus Electronic Technology Co., Ltd."); |
|||
IDS.put(10470, "BIAMP SYSTEMS"); |
|||
IDS.put(10509, "IBCONN Technologies (Shenzhen) Co., Ltd."); |
|||
IDS.put(10510, "Fugoo Inc."); |
|||
IDS.put(10519, "Pan Xin Precision Electronics Co., Ltd."); |
|||
IDS.put(10530, "Dongguan Digi-in Digital Technology Co., Ltd."); |
|||
IDS.put(1054, "Creative Labs"); |
|||
IDS.put(10540, "GENUSION, Inc."); |
|||
IDS.put(10544, "Ineda Systems Inc."); |
|||
IDS.put(10545, "Jolla Ltd."); |
|||
IDS.put(10546, "Peraso Technologies, Inc."); |
|||
IDS.put(10549, "Nanjing Magewell Electronics Co., Ltd."); |
|||
IDS.put(10560, "Shenzhen Yiwanda Electronics Co., Ltd."); |
|||
IDS.put(1057, "Nokia Corporation"); |
|||
IDS.put(10575, "Dollar Connection Ltd."); |
|||
IDS.put(10595, "BIO-key International, Inc."); |
|||
IDS.put(1060, "Microchip-SMSC"); |
|||
IDS.put(10603, "Xacti Corporation"); |
|||
IDS.put(10615, "Shenzhen Zowee Technology Co., Ltd."); |
|||
IDS.put(10643, "ADPlaus Technology Limited"); |
|||
IDS.put(10646, "Unwired Technology"); |
|||
IDS.put(1065, "Cirrus Logic Inc."); |
|||
IDS.put(10657, "Union Electric Plug & Connector Corp."); |
|||
IDS.put(10674, "Canova Tech"); |
|||
IDS.put(10685, "Silicon Works"); |
|||
IDS.put(10695, "HANRICO ANFU ELECTRONICS CO., LTD."); |
|||
IDS.put(10700, "Kodak Alaris"); |
|||
IDS.put(10702, "JGR Optics Inc."); |
|||
IDS.put(10703, "Richtek Technology Corporation"); |
|||
IDS.put(10705, "Binatone Electronics Int. Ltd."); |
|||
IDS.put(1071, "Molex Inc."); |
|||
IDS.put(10715, "Shenzhen iBoard Technology Co., Ltd."); |
|||
IDS.put(10719, "SMIT(HK) Limited"); |
|||
IDS.put(1072, "Fujitsu Component Limited"); |
|||
IDS.put(10725, "Dongguan Kechenda Electronic Technology Co., Ltd."); |
|||
IDS.put(10726, "Fengshun Peiying Electro-Acoustic Co., Ltd."); |
|||
IDS.put(10744, "MD ELEKTRONIK GmbH"); |
|||
IDS.put(10749, "Bad Elf, LLC"); |
|||
IDS.put(10770, "Vreo Limited"); |
|||
IDS.put(10772, "Kanex"); |
|||
IDS.put(10781, "Oxford Nanopore Technologies"); |
|||
IDS.put(10782, "Obsidian Technology"); |
|||
IDS.put(10783, "Lucent Trans Electronics Co., Ltd."); |
|||
IDS.put(10784, "GUOGUANG GROUP CO., LTD."); |
|||
IDS.put(10788, "CNPLUS"); |
|||
IDS.put(10789, "Fourstar Group"); |
|||
IDS.put(10790, "Tragant International Co., Ltd."); |
|||
IDS.put(10791, "DongGuan LianGang Optoelectronic Technology Co., Ltd."); |
|||
IDS.put(10797, "Atrust Computer Corp."); |
|||
IDS.put(10798, "VIA Alliance Semiconductor Co., Ltd."); |
|||
IDS.put(10799, "BSUN Electronics Co., Ltd."); |
|||
IDS.put(1080, "Advanced Micro Devices"); |
|||
IDS.put(10807, "RTD Embedded Technologies, Inc."); |
|||
IDS.put(10816, "Shenzhen Choseal Industrial Co., Ltd."); |
|||
IDS.put(10817, "Canyon Semiconductor"); |
|||
IDS.put(10818, "Spectra7 Microsystems Corp."); |
|||
IDS.put(10821, "Meizu Technology Co., Ltd."); |
|||
IDS.put(10822, "Hubei Yingtong Telecommunication Cable Inc."); |
|||
IDS.put(10829, "Wilder Technologies"); |
|||
IDS.put(10837, "Diodes Inc."); |
|||
IDS.put(10846, "DuPont"); |
|||
IDS.put(1085, "Lexmark International Inc."); |
|||
IDS.put(10852, "Zhejiang Songcheng Electronics Co., Ltd."); |
|||
IDS.put(10859, "VSN Mobil"); |
|||
IDS.put(10875, "Bellwether Electronic Corp."); |
|||
IDS.put(10878, "VAIO Corporation"); |
|||
IDS.put(10879, "Perixx Computer GmbH"); |
|||
IDS.put(10885, "HANK ELECTRONICS CO., LTD"); |
|||
IDS.put(10892, "Sonnet Technologies, Inc."); |
|||
IDS.put(10893, "Keysight Technologies Inc."); |
|||
IDS.put(10895, "Manutronics Vietnam Joint Stock Company"); |
|||
IDS.put(10900, "G2 Touch Co., Ltd."); |
|||
IDS.put(10902, "Micromax Informatics Ltd"); |
|||
IDS.put(10910, "SEIKO SOLUTIONS Inc."); |
|||
IDS.put(10912, "Casco Products Corp."); |
|||
IDS.put(10922, "Virtium Technology, Inc."); |
|||
IDS.put(10923, "Field and Company LLC, dba Leef USA"); |
|||
IDS.put(10928, "GM Global Technology Operations LLC"); |
|||
IDS.put(10931, "Key Asic Inc."); |
|||
IDS.put(10943, "Revolabs, Inc."); |
|||
IDS.put(10945, "Lattice Semiconductor Corp"); |
|||
IDS.put(10947, "Foshan Nanhai Saga Audio Equipment Co., Ltd."); |
|||
IDS.put(10957, "Silergy Corp."); |
|||
IDS.put(10963, "Shenzhen Hali-Power Industrial Co., Ltd."); |
|||
IDS.put(10971, "I-PEX (Dai-ichi Seiko)"); |
|||
IDS.put(10973, "SEE-PLUS INDUSTRIAL LTD."); |
|||
IDS.put(10990, "Adapt-IP Company"); |
|||
IDS.put(10997, "Libratone A/S"); |
|||
IDS.put(10999, "Shenzhen Hazens Automotive Electronics (SZ) Co., Ltd."); |
|||
IDS.put(11000, "Jiangsu Toppower Automotive Electronics Co., Ltd."); |
|||
IDS.put(11001, "Drapho Electronics Technology Co., Ltd."); |
|||
IDS.put(1102, "Alps Electric Co., Ltd."); |
|||
IDS.put(11022, "Le Shi Zhi Xin Electronic Technology (Tian Jin) Limited"); |
|||
IDS.put(11024, "Cardiac Insight, Inc."); |
|||
IDS.put(11028, "EverPro Technologies Company, Ltd."); |
|||
IDS.put(11029, "Rosenberger Hochfrequenztechnik"); |
|||
IDS.put(11035, "Dongguan City Sanji Electronics Co., Ltd."); |
|||
IDS.put(11037, "Lintes Technology Co., Ltd."); |
|||
IDS.put(11039, "KinnexA, Inc."); |
|||
IDS.put(11042, "Metra Electronics Corp."); |
|||
IDS.put(11044, "KeepKey, LLC"); |
|||
IDS.put(11047, "FluxData Incorporated"); |
|||
IDS.put(1105, "Texas Instruments"); |
|||
IDS.put(11061, "Assem Technology Co., Ltd."); |
|||
IDS.put(11062, "Dongguan City Jianghan Electronics Co., Ltd."); |
|||
IDS.put(11063, "Huizhou Desay SV Automotive Co., Ltd."); |
|||
IDS.put(11064, "Ningbo Rixing Electronics Co., Ltd."); |
|||
IDS.put(11069, "GuangDong YuanFeng Automotive Electroics Co., Ltd."); |
|||
IDS.put(11080, "Sounding Audio Industrial Limited"); |
|||
IDS.put(11082, "Yueqing Huaxin Electronic Co., Ltd."); |
|||
IDS.put(11098, "Universal Audio, Inc."); |
|||
IDS.put(11111, "Lifesize, Inc."); |
|||
IDS.put(11123, "Pioneer DJ Corporation"); |
|||
IDS.put(11124, "Embedded Intelligence, Inc."); |
|||
IDS.put(11125, "New Matter"); |
|||
IDS.put(11126, "Shanghai Wingtech Electronic Technology Co., Ltd."); |
|||
IDS.put(11127, "Epiphan Systems Inc."); |
|||
IDS.put(11130, "Spin Master Far East Ltd."); |
|||
IDS.put(11131, "Gigaset Digital Technology (Shenzhen) Co., Ltd."); |
|||
IDS.put(11132, "Noveltek Semiconductor Corp."); |
|||
IDS.put(11139, "Silicon Line GmbH"); |
|||
IDS.put(11140, "Ever Win International Corp."); |
|||
IDS.put(11144, "Socionext Inc."); |
|||
IDS.put(11145, "Ugreen Group Limited"); |
|||
IDS.put(11146, "Shanghai Pateo Electronic Equipment Mfg. Co., Ltd."); |
|||
IDS.put(1115, "Renesas Electronics Corp."); |
|||
IDS.put(11154, "i-BLADES, Inc."); |
|||
IDS.put(11155, "Altia Systems Inc."); |
|||
IDS.put(11156, "ShenZhen Baoyuanda Electronics Co., Ltd."); |
|||
IDS.put(11157, "iST - Integrated Service Technology Inc."); |
|||
IDS.put(11158, "HYUNDAI MOBIS Co., Ltd."); |
|||
IDS.put(11161, "360fly, Inc."); |
|||
IDS.put(11162, "HUIZHOU CHENG SHUO HARDWARE PLASTIC CO., LTD."); |
|||
IDS.put(11163, "Zhongshan Aute Electronics Technology Co., Ltd."); |
|||
IDS.put(11164, "Guangdong King Link Industrial Co., Ltd."); |
|||
IDS.put(11167, "Scietera Technologies, Inc."); |
|||
IDS.put(11168, "InVue Security Products"); |
|||
IDS.put(11169, "I-Sheng Electric Wire & Cable Co., Ltd."); |
|||
IDS.put(11170, "China Daheng Group Inc Beijing Image Vision Tech Branch"); |
|||
IDS.put(11171, "Shenzhen FeiTianXia Technology Ltd."); |
|||
IDS.put(11172, "Shenzhen HengJia New Energy Auto Part Co., Ltd."); |
|||
IDS.put(11175, "77 Elektronika Kft."); |
|||
IDS.put(11176, "YUDU EASON ELECTRONIC CO., LTD."); |
|||
IDS.put(1118, "Microsoft Corporation"); |
|||
IDS.put(11181, "XIN JI (SHENZHEN) COMPUTER PARTS CO., LTD."); |
|||
IDS.put(11189, "Silk ID Systems"); |
|||
IDS.put(11190, "3D Imaging & Simulations Corp. (3DISC)"); |
|||
IDS.put(11191, "Dongguan ChengXiang Industrial Co., Ltd."); |
|||
IDS.put(11192, "OCC (Zhuhai) Electronic Co., Ltd."); |
|||
IDS.put(11194, "Sinseader Electronic Co., Ltd."); |
|||
IDS.put(11195, "DONGGUAN YELLOWKNIFE Industrial Co., Ltd."); |
|||
IDS.put(11197, "RF Creations Ltd."); |
|||
IDS.put(11198, "Chengyi Semiconductors (Shanghai) Co., Ltd."); |
|||
IDS.put(11199, "Shenzhen Shinning Electronic Co., Ltd."); |
|||
IDS.put(11200, "Shenzhen WFD Electronics Co., Ltd."); |
|||
IDS.put(11201, "Dongguan Sino Syncs Industrial Co., Ltd."); |
|||
IDS.put(11202, "JNTC Co., Ltd."); |
|||
IDS.put(11208, "DONGGUAN POLIXIN ELECTRIC CO., LTD."); |
|||
IDS.put(11209, "Tama Electric (Suzhou) Co., Ltd."); |
|||
IDS.put(1121, "Primax Electronics"); |
|||
IDS.put(11210, "Exvision, Inc."); |
|||
IDS.put(11216, "mophie, LLC"); |
|||
IDS.put(11219, "Dongguan ULT-unite electronic technology co., LTD"); |
|||
IDS.put(11220, "JL Audio, Inc."); |
|||
IDS.put(11221, "Cable Matters Inc."); |
|||
IDS.put(11222, "CoroWare, Inc."); |
|||
IDS.put(11229, "Charm Sciences Inc."); |
|||
IDS.put(1123, "EATON"); |
|||
IDS.put(11230, "Pickering Interfaces Limited"); |
|||
IDS.put(11231, "Hangzhou Hikvision Digital Technology Co., Ltd."); |
|||
IDS.put(11232, "FULLINK ELECTRONICS TECHNOLOGY (SZ) LTD"); |
|||
IDS.put(11233, "AutoChips Inc."); |
|||
IDS.put(11234, "Electric Connector Technology Co., Ltd."); |
|||
IDS.put(11237, "LELTEK"); |
|||
IDS.put(11238, "Dongguan KaiWin Electronics Co., Ltd."); |
|||
IDS.put(11239, "BEFS Co., Ltd."); |
|||
IDS.put(11240, "Archisite, Inc."); |
|||
IDS.put(11241, "Magneti Marelli S.p.A Electr BL"); |
|||
IDS.put(11246, "Ventev Mobile"); |
|||
IDS.put(11247, "Quanta Storage Inc."); |
|||
IDS.put(11248, "Tech-Top Technology Limited"); |
|||
IDS.put(11253, "Shenzhen YOOBAO Technology Co., Ltd."); |
|||
IDS.put(11254, "Shenzhen Sinotek Technology Co., Ltd."); |
|||
IDS.put(11255, "KEYW"); |
|||
IDS.put(11256, "Visual Land Inc."); |
|||
IDS.put(11264, "MEEM SL Ltd"); |
|||
IDS.put(11265, "Dongguan Arin Electronics Technology Co., Ltd."); |
|||
IDS.put(11266, "DongGuan City JianNuo Electronics Co., Ltd."); |
|||
IDS.put(11268, "Shenzhen XOX Electronics Co., Ltd."); |
|||
IDS.put(11269, "Protop International Inc."); |
|||
IDS.put(11270, "Microsemi Semiconductor (US) Inc."); |
|||
IDS.put(11271, "Webcloak LLC"); |
|||
IDS.put(11272, "INVECAS INC."); |
|||
IDS.put(11274, "ATANS Technology Inc."); |
|||
IDS.put(11275, "Triple Win Precision Technology Co., Ltd."); |
|||
IDS.put(11276, "IC Realtech"); |
|||
IDS.put(11277, "Embrava Pty Ltd"); |
|||
IDS.put(1128, "Wieson Technologies Co., Ltd."); |
|||
IDS.put(11280, "Sinotronics Co., Ltd."); |
|||
IDS.put(11281, "ALLBEST ELECTRONICS TECHNOLOGY CO., LTD."); |
|||
IDS.put(11282, "Shenzhen Xin Kai Feng Electronics Factory"); |
|||
IDS.put(11283, "MOST WELL Technology Corp."); |
|||
IDS.put(11284, "Buffalo Memory Co., Ltd."); |
|||
IDS.put(11285, "Xentris Wireless"); |
|||
IDS.put(11286, "Priferential Accessories Ltd"); |
|||
IDS.put(11289, "Sunlike Technology Co., Ltd."); |
|||
IDS.put(11290, "Young Fast Optoelectronics Co., Ltd."); |
|||
IDS.put(11291, "ISAW Camera Inc"); |
|||
IDS.put(11298, "Qanba USA, LLC"); |
|||
IDS.put(11299, "Super Micro Computer Inc."); |
|||
IDS.put(11302, "Micromax International Corporation"); |
|||
IDS.put(11304, "Granite River Labs Japan Ltd."); |
|||
IDS.put(11305, "Coagent Enterprise Limited"); |
|||
IDS.put(11306, "LEIA Inc."); |
|||
IDS.put(11309, "Shenzhen Ebull Technology Limited"); |
|||
IDS.put(1131, "American Megatrends"); |
|||
IDS.put(11310, "Hualun Technology Co., Ltd."); |
|||
IDS.put(11311, "Sensel, Inc."); |
|||
IDS.put(11319, "Shenzhen Adition Audio Science & Technology Co., Ltd."); |
|||
IDS.put(11320, "Goldenconn Electronics Technology (Suzhou) Co., Ltd."); |
|||
IDS.put(11321, "JIB Electronics Technology Co., Ltd."); |
|||
IDS.put(11322, "Changzhou Shinco Automotive Electronics Co., Ltd."); |
|||
IDS.put(11323, "Shenzhen Hangsheng Electronics Corp., Ltd."); |
|||
IDS.put(11324, "Beartooth Radio, Inc."); |
|||
IDS.put(11325, "Audience, A Knowles Company"); |
|||
IDS.put(11327, "Nextbit Systems, Inc."); |
|||
IDS.put(11328, "Leadtrend"); |
|||
IDS.put(11329, "Adaptertek Technology Co., Ltd."); |
|||
IDS.put(1133, "Logitech Inc."); |
|||
IDS.put(11330, "Feature Integration Technology Inc."); |
|||
IDS.put(11331, "Avegant Corporation"); |
|||
IDS.put(11335, "Chunghsin International Electronics Co., Ltd."); |
|||
IDS.put(11336, "Delphi Electrical Centers (Shanghai) Co., Ltd."); |
|||
IDS.put(11341, "VVETEK DOO"); |
|||
IDS.put(11347, "Huizhou Foryou General Electronics Co., Ltd."); |
|||
IDS.put(11348, "LifeWatch Technologies Ltd."); |
|||
IDS.put(11349, "Magicleap"); |
|||
IDS.put(11355, "Dongguan City Shenglan Electronics Co., LTD."); |
|||
IDS.put(11356, "Neusoft Corporation"); |
|||
IDS.put(11357, "SIP Simya Electronics Technology Co., Ltd."); |
|||
IDS.put(11358, "GNSD Automotive Co., Ltd."); |
|||
IDS.put(11359, "YOODS Co., Ltd."); |
|||
IDS.put(11360, "Sirin Mobile Technologies AG"); |
|||
IDS.put(11361, "Jadmam Corporation dba: Boytone"); |
|||
IDS.put(11373, "Gibson Innovations"); |
|||
IDS.put(11374, "Shen Zhen Xian Shuo Technology Co. LTD"); |
|||
IDS.put(11375, "PST Eletronica LTDA"); |
|||
IDS.put(11376, "PERI, Inc."); |
|||
IDS.put(11377, "Bozhou BoTong Information Technology Co., Ltd."); |
|||
IDS.put(11383, "Profindustry GmbH"); |
|||
IDS.put(11384, "BRAGI GmbH"); |
|||
IDS.put(11385, "WAWGD, Inc. (DBA: Foresight Sports)"); |
|||
IDS.put(11390, "Dongguan Allpass Electronic Co., Ltd."); |
|||
IDS.put(11391, "SHENZHEN D-VITEC INDUSTRIAL CO., LTD."); |
|||
IDS.put(11392, "motomobile AG"); |
|||
IDS.put(11393, "Indie Semiconductor"); |
|||
IDS.put(11397, "Audientes"); |
|||
IDS.put(11403, "Huizhou Dehong Technology Co., Ltd."); |
|||
IDS.put(11404, "PowerCenter Technology Limited"); |
|||
IDS.put(11405, "Mizco International, Inc."); |
|||
IDS.put(11408, "I. AM. PLUS, LLC"); |
|||
IDS.put(11409, "Corigine, Inc."); |
|||
IDS.put(11410, "Ningbo Yinzhou Shengke Electronics Co., Ltd."); |
|||
IDS.put(11417, "Prusa Research s.r.o."); |
|||
IDS.put(11423, "e-Smart Systems Pvt. Ltd."); |
|||
IDS.put(11424, "Leagtech Jiangxi Electronic Co., Ltd."); |
|||
IDS.put(11425, "Dongguan Yujia Electronics Technology Co., Ltd."); |
|||
IDS.put(11426, "GuangZhou MingPing Electronics Technology"); |
|||
IDS.put(11427, "DJI Technology Co., Ltd."); |
|||
IDS.put(11428, "Shenzhen Alex Technology Co., Ltd."); |
|||
IDS.put(11433, "JITS TECHNOLOGY CO., LIMITED"); |
|||
IDS.put(11434, "LIVV Brand llc"); |
|||
IDS.put(11444, "Ava Enterprises, Inc. dba: Boss Audio Systems"); |
|||
IDS.put(11448, "Shenzhen Sydixon Electronic Technology Co., Ltd."); |
|||
IDS.put(11449, "On-Bright Electronics (Shanghai) Co., Ltd."); |
|||
IDS.put(11450, "Dongguan Puxu Industrial Co., Ltd."); |
|||
IDS.put(11451, "Shenzhen Soling Indusrtial Co., Ltd."); |
|||
IDS.put(11453, "EGGCYTE, INC."); |
|||
IDS.put(11455, "Donggguan Yuhua Electronic Co., Ltd."); |
|||
IDS.put(11456, "Hangzhou Zero Zero Technology Co., Ltd."); |
|||
IDS.put(11462, "Prodigy Technovations Pvt Ltd"); |
|||
IDS.put(11463, "EmergiTech, Inc"); |
|||
IDS.put(11464, "Hewlett Packard Enterprise"); |
|||
IDS.put(11465, "Monolithic Power Systems Inc."); |
|||
IDS.put(11467, "USB Memory Direct"); |
|||
IDS.put(11468, "Silicon Mitus Inc."); |
|||
IDS.put(11472, "Technics Global Electronics & JCE Co., Ltd."); |
|||
IDS.put(11478, "Immersive Media"); |
|||
IDS.put(11479, "Cosemi Technologies Inc."); |
|||
IDS.put(11481, "Cambrionix Ltd"); |
|||
IDS.put(11482, "CXUN Co. Ltd."); |
|||
IDS.put(11483, "China Tsp Inc"); |
|||
IDS.put(11490, "Yanfeng Visteon (Chongqing) Automotive Electronics Co"); |
|||
IDS.put(11491, "Alcorlink Corp."); |
|||
IDS.put(11492, "ISBC Ltd."); |
|||
IDS.put(11493, "InX8 Inc dba: AKiTiO"); |
|||
IDS.put(11494, "SDAN Tecchnology Co., Ltd."); |
|||
IDS.put(11495, "Lemobile Information Technology (Beijing) Co., Ltd."); |
|||
IDS.put(11496, "GongGuan HWX Electronic Technology Co., Ltd."); |
|||
IDS.put(11497, "Suzhu Jingshi Electronic Technology Co., Ltd."); |
|||
IDS.put(11498, "Zhong Shan City Richsound Electronic Industrial Ltd."); |
|||
IDS.put(11499, "Dongguang Kangbang Electronics Co., Ltd."); |
|||
IDS.put(1151, "Plantronics, Inc."); |
|||
IDS.put(1154, "Kyocera Corporation"); |
|||
IDS.put(1155, "STMicroelectronics"); |
|||
IDS.put(1161, "Foxconn / Hon Hai"); |
|||
IDS.put(1165, "ITE Tech Inc."); |
|||
IDS.put(1177, "Yamaha Corporation"); |
|||
IDS.put(1188, "Hitachi, Ltd."); |
|||
IDS.put(1191, "Visioneer"); |
|||
IDS.put(1193, "Canon Inc."); |
|||
IDS.put(1200, "Nikon Corporation"); |
|||
IDS.put(1201, "Pan International"); |
|||
IDS.put(1204, "Cypress Semiconductor"); |
|||
IDS.put(1205, "ROHM Co., Ltd."); |
|||
IDS.put(1207, "Compal Electronics, Inc."); |
|||
IDS.put(1208, "Seiko Epson Corp."); |
|||
IDS.put(1211, "I-O Data Device, Inc."); |
|||
IDS.put(1221, "Fujitsu Ltd."); |
|||
IDS.put(1227, "FUJIFILM Corporation"); |
|||
IDS.put(1238, "Mentor Graphics"); |
|||
IDS.put(1240, "Microchip Technology Inc."); |
|||
IDS.put(1241, "Holtek Semiconductor, Inc."); |
|||
IDS.put(1242, "Panasonic Corporation"); |
|||
IDS.put(1245, "Sharp Corporation"); |
|||
IDS.put(1250, "Exar Corporation"); |
|||
IDS.put(1254, "Identiv, Inc."); |
|||
IDS.put(1256, "Samsung Electronics Co., Ltd."); |
|||
IDS.put(1260, "Tokyo Electron Device Limited"); |
|||
IDS.put(1266, "Chicony Electronics Co., Ltd."); |
|||
IDS.put(1271, "Newnex Technology Corp."); |
|||
IDS.put(1273, "Brother Industries, Ltd."); |
|||
IDS.put(1276, "SUNPLUS TECHNOLOGY CO., LTD."); |
|||
IDS.put(1278, "PFU Limited"); |
|||
IDS.put(1281, "Fujikura/DDK"); |
|||
IDS.put(1282, "Acer, Inc."); |
|||
IDS.put(1287, "Hosiden Corporation"); |
|||
IDS.put(1293, "Belkin International, Inc."); |
|||
IDS.put(1300, "FCI Electronics"); |
|||
IDS.put(1302, "Longwell Electronics/Longwell Company"); |
|||
IDS.put(1305, "Star Micronics Co., LTD"); |
|||
IDS.put(1309, "American Power Conversion"); |
|||
IDS.put(1314, "ACON, Advanced-Connectek, Inc."); |
|||
IDS.put(1343, "Synopsys, Inc."); |
|||
IDS.put(1356, "Sony Corporation"); |
|||
IDS.put(1360, "Fuji Xerox Co., Ltd."); |
|||
IDS.put(1367, "ATEN International Co. Ltd."); |
|||
IDS.put(1369, "Cadence Design Systems, Inc."); |
|||
IDS.put(1386, "WACOM Co., Ltd."); |
|||
IDS.put(1389, "EIZO Corporation"); |
|||
IDS.put(1390, "Elecom Co., Ltd."); |
|||
IDS.put(1394, "Conexant Systems, Inc."); |
|||
IDS.put(1398, "BAFO/Quality Computer Accessories"); |
|||
IDS.put(1403, "Y-E Data, Inc."); |
|||
IDS.put(1404, "AVM GmbH"); |
|||
IDS.put(1410, "Roland Corporation"); |
|||
IDS.put(1412, "RATOC Systems, Inc."); |
|||
IDS.put(1419, "Infineon Technologies"); |
|||
IDS.put(1423, "Alcor Micro, Corp."); |
|||
IDS.put(1424, "OMRON Corporation"); |
|||
IDS.put(1447, "Bose Corporation"); |
|||
IDS.put(1449, "OmniVision Technologies, Inc."); |
|||
IDS.put(1452, "Apple"); |
|||
IDS.put(1453, "Y.C. Cable U.S.A., Inc"); |
|||
IDS.put(14627, "National Instruments"); |
|||
IDS.put(1470, "Tyco Electronics Corp., a TE Connectivity Ltd. company"); |
|||
IDS.put(1473, "MegaChips Corporation"); |
|||
IDS.put(1478, "Qualcomm, Inc"); |
|||
IDS.put(1480, "Foxlink/Cheng Uei Precision Industry Co., Ltd."); |
|||
IDS.put(1482, "Ricoh Company Ltd."); |
|||
IDS.put(1498, "Microtek International Inc."); |
|||
IDS.put(1504, "Symbol Technologies"); |
|||
IDS.put(1507, "Genesys Logic, Inc."); |
|||
IDS.put(1509, "Fuji Electric Co., Ltd."); |
|||
IDS.put(1525, "Unixtar Technology Inc."); |
|||
IDS.put(1529, "Datalogic ADC"); |
|||
IDS.put(1535, "LeCroy Corporation"); |
|||
IDS.put(1539, "Novatek Microelectronics Corp."); |
|||
IDS.put(1545, "SMK Manufacturing Inc."); |
|||
IDS.put(1551, "Joinsoon Electronics Mfg. Co., Ltd."); |
|||
IDS.put(1555, "TransAct Technologies Incorporated"); |
|||
IDS.put(1561, "Seiko Instruments Inc."); |
|||
IDS.put(1582, "JPC/MAIN SUPER Inc."); |
|||
IDS.put(1583, "Sin Sheng Terminal & Machine Inc."); |
|||
IDS.put(1593, "Chrontel, Inc."); |
|||
IDS.put(1611, "Analog Devices, Inc. Development Tools"); |
|||
IDS.put(1612, "Ji-Haw Industrial Co., Ltd"); |
|||
IDS.put(1614, "Suyin Corporation"); |
|||
IDS.put(1621, "Space Shuttle Hi-Tech Co.,Ltd."); |
|||
IDS.put(1622, "Glory Mark Electronic Ltd."); |
|||
IDS.put(1623, "Tekcon Electronics Corp."); |
|||
IDS.put(1624, "Sigma Designs, Inc."); |
|||
IDS.put(1631, "Good Way Technology Co., Ltd. & GWC technology Inc"); |
|||
IDS.put(1632, "TSAY-E (BVI) International Inc."); |
|||
IDS.put(1633, "Hamamatsu Photonics K.K."); |
|||
IDS.put(1642, "Total Technologies, Ltd."); |
|||
IDS.put(1659, "Prolific Technology, Inc."); |
|||
IDS.put(16700, "Dell Inc."); |
|||
IDS.put(1680, "Golden Bridge Electech Inc."); |
|||
IDS.put(1689, "Tektronix, Inc."); |
|||
IDS.put(1690, "Askey Computer Corporation"); |
|||
IDS.put(1709, "Greatland Electronics Taiwan Ltd."); |
|||
IDS.put(1710, "Eurofins Digital Testing Belgium"); |
|||
IDS.put(1720, "Pixela Corporation"); |
|||
IDS.put(1724, "Oki Data Corporation"); |
|||
IDS.put(1727, "Leoco Corporation"); |
|||
IDS.put(1732, "Bizlink Technology, Inc."); |
|||
IDS.put(1736, "SIIG, Inc."); |
|||
IDS.put(1747, "Mitsubishi Electric Corporation"); |
|||
IDS.put(1758, "Heisei Technology Co., Ltd."); |
|||
IDS.put(1802, "Oki Electric Industry Co., Ltd."); |
|||
IDS.put(1805, "Comoss Electronic Co., Ltd."); |
|||
IDS.put(1809, "Magic Control Technology Corp."); |
|||
IDS.put(1816, "Imation Corp."); |
|||
IDS.put(1838, "Sunix Co., Ltd."); |
|||
IDS.put(1846, "Lorom Industrial Co., Ltd."); |
|||
IDS.put(1848, "Mad Catz, Inc."); |
|||
IDS.put(1899, "HID Global GmbH"); |
|||
IDS.put(1901, "Denso Corporation"); |
|||
IDS.put(1913, "Fairchild Semiconductor"); |
|||
IDS.put(1921, "SanDisk Corporation"); |
|||
IDS.put(1937, "Copartner Technology Corporation"); |
|||
IDS.put(1954, "National Technical Systems"); |
|||
IDS.put(1971, "Plustek, Inc."); |
|||
IDS.put(1972, "OLYMPUS CORPORATION"); |
|||
IDS.put(1975, "TIME Interconnect Ltd."); |
|||
IDS.put(1994, "AVerMedia Technologies, Inc."); |
|||
IDS.put(1999, "Casio Computer Co., Ltd."); |
|||
IDS.put(2015, "David Electronics Company, Ltd."); |
|||
IDS.put(2039, "Century Corporation"); |
|||
IDS.put(2058, "Evermuch Technology Co., Ltd."); |
|||
IDS.put(2101, "Action Star Enterprise Co., Ltd."); |
|||
IDS.put(2112, "Argosy Research Inc."); |
|||
IDS.put(2122, "Wipro Limited"); |
|||
IDS.put(2159, "MEC IMEX INC/HPT"); |
|||
IDS.put(2205, "Icron Technologies Corporation"); |
|||
IDS.put(2247, "TAI TWUN ENTERPRISE CO., LTD."); |
|||
IDS.put(2276, "Pioneer Corporation"); |
|||
IDS.put(2278, "Gemalto SA"); |
|||
IDS.put(2310, "FARADAY Technology Corp."); |
|||
IDS.put(2313, "Audio-Technica Corp."); |
|||
IDS.put(2316, "Silicon Motion, Inc. - Taiwan"); |
|||
IDS.put(2334, "Garmin International"); |
|||
IDS.put(2352, "Toshiba Corporation"); |
|||
IDS.put(2362, "Pixart Imaging, Inc."); |
|||
IDS.put(2363, "Plextor LLC"); |
|||
IDS.put(2366, "J.S.T. Mfg. Co., Ltd."); |
|||
IDS.put(2385, "Kingston Technology Company"); |
|||
IDS.put(2389, "NVIDIA"); |
|||
IDS.put(2395, "Medialogic Corporation"); |
|||
IDS.put(2397, "Polycom, Inc."); |
|||
IDS.put(2468, "Contech Research, Inc."); |
|||
IDS.put(2472, "Lin Shiung Enterprise Co., Ltd."); |
|||
IDS.put(2475, "Japan Cash Machine Co., Ltd."); |
|||
IDS.put(2498, "NISCA Corporation"); |
|||
IDS.put(2511, "Electronics Testing Center, Taiwan"); |
|||
IDS.put(2522, "A-FOUR TECH CO., LTD."); |
|||
IDS.put(2555, "Altera"); |
|||
IDS.put(2578, "Cambridge Silicon Radio Ltd."); |
|||
IDS.put(2583, "HOYA Corporation"); |
|||
IDS.put(2631, "Hirose Electric Co., Ltd."); |
|||
IDS.put(2636, "COMPUTEX Co., Ltd."); |
|||
IDS.put(2640, "Mimaki Engineering Co., Ltd."); |
|||
IDS.put(2652, "Broadcom Corp."); |
|||
IDS.put(2667, "Green House Co., Ltd."); |
|||
IDS.put(2702, "Japan Aviation Electronics Industry Ltd. (JAE)"); |
|||
IDS.put(2727, "Wincor Nixdorf GmbH & Co KG"); |
|||
IDS.put(2733, "Rohde & Schwarz GmbH & Co. KG"); |
|||
IDS.put(2787, "Allion Labs, Inc."); |
|||
IDS.put(2821, "ASUSTek Computer Inc."); |
|||
IDS.put(2849, "Yokogawa Electric Corporation"); |
|||
IDS.put(2851, "Pan-Asia Electronics Co., Ltd."); |
|||
IDS.put(2894, "Musical Electronics Ltd."); |
|||
IDS.put(2907, "Anritsu Corporation"); |
|||
IDS.put(2922, "Maxim Integrated Products"); |
|||
IDS.put(2965, "ASIX Electronics Corporation"); |
|||
IDS.put(2967, "O2Micro, Inc."); |
|||
IDS.put(3010, "Seagate Technology LLC"); |
|||
IDS.put(3034, "Realtek Semiconductor Corp."); |
|||
IDS.put(3035, "Ericsson AB"); |
|||
IDS.put(3044, "Elka International Ltd."); |
|||
IDS.put(3056, "Pace Micro Technology PLC"); |
|||
IDS.put(3108, "Taiyo Yuden Co., Ltd."); |
|||
IDS.put(3129, "Aeroflex"); |
|||
IDS.put(3132, "Radius Co., Ltd."); |
|||
IDS.put(3141, "Sonix Technology Co., Ltd."); |
|||
IDS.put(3158, "Billion Bright (HK) Corporation Limited"); |
|||
IDS.put(3161, "Dong Guan Shinko Wire Co., Ltd."); |
|||
IDS.put(3170, "Chant Sincere Co., Ltd"); |
|||
IDS.put(3190, "Solid State System Co., Ltd."); |
|||
IDS.put(3209, "Honda Tsushin Kogyo Co., Ltd"); |
|||
IDS.put(3245, "Motorola Solutions"); |
|||
IDS.put(3255, "Singatron Enterprise Co. Ltd."); |
|||
IDS.put(3268, "emsys Embedded Systems GmbH"); |
|||
IDS.put(32902, "Intel Corporation"); |
|||
IDS.put(3294, "Z-Com INC."); |
|||
IDS.put(3313, "e-CONN ELECTRONIC CO., LTD."); |
|||
IDS.put(3314, "ENE Technology Inc."); |
|||
IDS.put(3351, "NALTEC, Inc."); |
|||
IDS.put(3402, "NF Corporation"); |
|||
IDS.put(3403, "Grape Systems Inc."); |
|||
IDS.put(3409, "Volex (Asia) Pte Ltd"); |
|||
IDS.put(3425, "MEILU ELECTRONICS (SHENZHEN) CO., LTD."); |
|||
IDS.put(3441, "Hirakawa Hewtech Corp."); |
|||
IDS.put(3452, "Taiwan Line Tek Electronic Co., Ltd."); |
|||
IDS.put(3463, "Dolby Laboratories Inc."); |
|||
IDS.put(3468, "C-MEDIA ELECTRONICS INC."); |
|||
IDS.put(3472, "Sure-Fire Electrical Corporation"); |
|||
IDS.put(3495, "IOGEAR, Inc."); |
|||
IDS.put(3504, "Micro-Star International Co., Ltd."); |
|||
IDS.put(3537, "Contek Electronics Co., Ltd."); |
|||
IDS.put(3540, "Custom Engineering SPA"); |
|||
IDS.put(3641, "Smart Modular Technologies, Inc."); |
|||
IDS.put(3658, "Shenzhen Bao Hing Electric Wire & Cable Mfr. Co."); |
|||
IDS.put(3673, "Bourns, Inc."); |
|||
IDS.put(3690, "Megawin Technology Co., Ltd."); |
|||
IDS.put(3698, "Hsi-Chin Electronics Co., Ltd."); |
|||
IDS.put(3714, "Ching Tai Electric Wire & Cable Co., Ltd."); |
|||
IDS.put(3724, "Well Force Electronic Co., Ltd"); |
|||
IDS.put(3725, "MediaTek Inc."); |
|||
IDS.put(3728, "CRU"); |
|||
IDS.put(3744, "Ours Technology Inc."); |
|||
IDS.put(3762, "Y-S ELECTRONIC CO., LTD."); |
|||
IDS.put(3778, "Sweetray Industrial Ltd."); |
|||
IDS.put(3779, "Axell Corporation"); |
|||
IDS.put(3782, "InnoVISION Multimedia Limited"); |
|||
IDS.put(3790, "TaiSol Electronics Co., Ltd."); |
|||
IDS.put(3812, "Sunrich Technology (H.K.) Ltd."); |
|||
IDS.put(3868, "Funai Electric Co., Ltd."); |
|||
IDS.put(3873, "IOI Technology Corporation"); |
|||
IDS.put(3890, "YFC-BonEagle Electric Co., Ltd."); |
|||
IDS.put(3896, "Nien-Yi Industrial Corp."); |
|||
IDS.put(3916, "WORLDWIDE CABLE OPTO CORP."); |
|||
IDS.put(3923, "Taiyo Cable (Dongguan) Co. Ltd."); |
|||
IDS.put(3924, "Kawai Musical Instruments Mfg. Co., Ltd."); |
|||
IDS.put(3936, "GuangZhou Chief Tech Electronic Technology Co. Ltd."); |
|||
IDS.put(3944, "UQUEST, LTD."); |
|||
IDS.put(3991, "CviLux Corporation"); |
|||
IDS.put(4003, "Chief Land Electronic Co., Ltd."); |
|||
IDS.put(4046, "Sony Mobile Communications"); |
|||
IDS.put(4087, "CHI SHING COMPUTER ACCESSORIES CO., LTD."); |
|||
IDS.put(4096, "Speed Tech Corp."); |
|||
IDS.put(4100, "LG Electronics Inc."); |
|||
IDS.put(4101, "Apacer Technology Inc."); |
|||
IDS.put(4134, "Newly Corporation"); |
|||
IDS.put(4168, "Targus Group International"); |
|||
IDS.put(4172, "AMCO TEC International Inc."); |
|||
IDS.put(4183, "ON Semiconductor"); |
|||
IDS.put(4184, "Western Digital Technologies, Inc."); |
|||
IDS.put(4227, "CANON ELECTRONICS INC."); |
|||
IDS.put(4235, "Grand-tek Technology Co., Ltd."); |
|||
IDS.put(4236, "Robert Bosch GmbH"); |
|||
IDS.put(4238, "Lotes Co., Ltd."); |
|||
IDS.put(4266, "Cables To Go"); |
|||
IDS.put(4267, "Universal Global Scientific Industrial Co., Ltd."); |
|||
IDS.put(4292, "Silicon Laboratories, Inc."); |
|||
IDS.put(4301, "Kycon Inc."); |
|||
IDS.put(4362, "Moxa Inc."); |
|||
IDS.put(4370, "Golden Bright (Sichuan) Electronic Technology Co Ltd"); |
|||
IDS.put(4382, "VSO ELECTRONICS CO., LTD."); |
|||
IDS.put(4398, "Master Hill Electric Wire and Cable Co., Ltd."); |
|||
IDS.put(4477, "Santa Electronic Inc."); |
|||
IDS.put(4505, "Sierra Wireless Inc."); |
|||
IDS.put(4522, "GlobalMedia Group, LLC"); |
|||
IDS.put(4528, "ATECH FLASH TECHNOLOGY"); |
|||
IDS.put(4643, "SKYCABLE ENTERPRISE CO., LTD."); |
|||
IDS.put(4703, "ADATA Technology Co., Ltd."); |
|||
IDS.put(4716, "Aristocrat Technologies"); |
|||
IDS.put(4717, "Bel Stewart"); |
|||
IDS.put(4742, "MARVELL SEMICONDUCTOR, INC."); |
|||
IDS.put(4756, "RISO KAGAKU CORP."); |
|||
IDS.put(4792, "Zhejiang Xinya Electronic Technology Co., Ltd."); |
|||
IDS.put(4817, "Huawei Technologies Co., Ltd."); |
|||
IDS.put(4823, "Better Holdings (HK) Limited"); |
|||
IDS.put(4907, "Konica Minolta, Inc."); |
|||
IDS.put(4925, "Jasco Products Company"); |
|||
IDS.put(4989, "Pericom Semiconductor Corp."); |
|||
IDS.put(5008, "TomTom International B.V."); |
|||
IDS.put(5075, "AzureWave Technologies, Inc."); |
|||
IDS.put(5117, "Initio Corporation"); |
|||
IDS.put(5118, "Phison Electronics Corp."); |
|||
IDS.put(5134, "Telechips, Inc."); |
|||
IDS.put(5145, "ABILITY ENTERPRISE CO., LTD."); |
|||
IDS.put(5148, "Leviton Manufacturing"); |
|||
IDS.put(5271, "Panstrong Company Ltd."); |
|||
IDS.put(5293, "CTK Corporation"); |
|||
IDS.put(5296, "StarTech.com Ltd."); |
|||
IDS.put(5376, "Ellisys"); |
|||
IDS.put(5404, "VeriSilicon Holdings Co., Ltd."); |
|||
IDS.put(5421, "JMicron Technology Corp."); |
|||
IDS.put(5422, "HLDS (Hitachi-LG Data Storage, Inc.)"); |
|||
IDS.put(5440, "Phihong Technology Co., Ltd."); |
|||
IDS.put(5451, "PNY Technologies Inc."); |
|||
IDS.put(5453, "Rapid Conn, Connect County Holdings Bhd"); |
|||
IDS.put(5454, "D & M Holdings, Inc."); |
|||
IDS.put(5480, "Sunf Pu Technology Co., Ltd"); |
|||
IDS.put(5488, "ALLTOP TECHNOLOGY CO., LTD."); |
|||
IDS.put(5510, "Palconn Technology Co., Ltd."); |
|||
IDS.put(5528, "Kunshan Guoji Electronics Co., Ltd."); |
|||
IDS.put(5546, "DongGuan Ya Lian Electronics Co., Ltd."); |
|||
IDS.put(5645, "Samtec"); |
|||
IDS.put(5694, "HongLin Electronics Co., Ltd."); |
|||
IDS.put(5753, "Total Phase"); |
|||
IDS.put(5766, "ZOOM Corporation"); |
|||
IDS.put(5836, "silex technology, Inc."); |
|||
IDS.put(5946, "F. Hoffmann-La Roche AG"); |
|||
IDS.put(5960, "MQP Electronics Ltd."); |
|||
IDS.put(5964, "ASMedia Technology Inc."); |
|||
IDS.put(5998, "UD electronic corp."); |
|||
IDS.put(6001, "Shenzhen Alex Connector Co., Ltd."); |
|||
IDS.put(6002, "System Level Solutions, Inc."); |
|||
IDS.put(6018, "Spreadtrum Hong Kong Limited"); |
|||
IDS.put(6024, "ShenZhen Litkconn Technology Co., Ltd."); |
|||
IDS.put(6053, "Advanced Connection Technology Inc."); |
|||
IDS.put(6095, "Hip Hing Cable & Plug Mfy. Ltd."); |
|||
IDS.put(6121, "DisplayLink (UK) Ltd."); |
|||
IDS.put(6127, "Lenovo"); |
|||
IDS.put(6133, "K.K. Rocky"); |
|||
IDS.put(6160, "Wanshih Electronic Co., Ltd."); |
|||
IDS.put(6185, "Dongguan YuQiu Electronics Co., Ltd."); |
|||
IDS.put(6193, "Gwo Jinn Industries Co., Ltd."); |
|||
IDS.put(6297, "Linkiss Co., Ltd."); |
|||
IDS.put(6353, "Google Inc."); |
|||
IDS.put(6394, "Kuang Ying Computer Equipment Co., Ltd."); |
|||
IDS.put(6421, "Nordic Semiconductor ASA"); |
|||
IDS.put(6448, "Shenzhen Xianhe Technology Co., Ltd."); |
|||
IDS.put(6449, "Ningbo Broad Telecommunication Co., Ltd."); |
|||
IDS.put(6470, "Irisguard UK Ltd"); |
|||
IDS.put(6473, "Lab126"); |
|||
IDS.put(6481, "Hyperstone GmbH"); |
|||
IDS.put(6487, "BIOS Corporation"); |
|||
IDS.put(6626, "Solomon Systech Limited"); |
|||
IDS.put(6639, "Pak Heng Technology (Shenzhen) Co., Ltd."); |
|||
IDS.put(6655, "Best Buy China Ltd."); |
|||
IDS.put(6666, "USB-IF non-workshop"); |
|||
IDS.put(6709, "Artesyn Technologies Inc."); |
|||
IDS.put(6720, "TERMINUS TECHNOLOGY INC."); |
|||
IDS.put(6766, "Global Unichip Corp."); |
|||
IDS.put(6786, "Proconn Technology Co., Ltd."); |
|||
IDS.put(6794, "Simula Technology Inc."); |
|||
IDS.put(6795, "SGS Taiwan Ltd."); |
|||
IDS.put(6830, "Johnson Component & Equipments Co., Ltd."); |
|||
IDS.put(6834, "Allied Vision Technologies GmbH"); |
|||
IDS.put(6859, "Salcomp Plc"); |
|||
IDS.put(6865, "Desan Wire Co., Ltd."); |
|||
IDS.put(6944, "MStar Semiconductor, Inc."); |
|||
IDS.put(6984, "Plastron Precision Co., Ltd."); |
|||
IDS.put(7013, "The Hong Kong Standards and Testing Centre Ltd."); |
|||
IDS.put(7048, "ShenMing Electron (Dong Guan) Co., Ltd."); |
|||
IDS.put(7086, "Vuzix Corporation"); |
|||
IDS.put(7108, "Ford Motor Co."); |
|||
IDS.put(7118, "Contac Cable Industrial Limited"); |
|||
IDS.put(7119, "Sunplus Innovation Technology Inc."); |
|||
IDS.put(7120, "Hangzhou Riyue Electronics Co., Ltd."); |
|||
IDS.put(7158, "Orient Semiconductor Electronics, Ltd."); |
|||
IDS.put(7207, "SHENZHEN DNS INDUSTRIES CO., LTD."); |
|||
IDS.put(7217, "LS Mtron Ltd."); |
|||
IDS.put(7229, "NONIN MEDICAL INC."); |
|||
IDS.put(7275, "Philips & Lite-ON Digital Solutions Corporation"); |
|||
IDS.put(7310, "ASTRON INTERNATIONAL CORP."); |
|||
IDS.put(7320, "ALPINE ELECTRONICS, INC."); |
|||
IDS.put(7347, "Aces Electronics Co., Ltd."); |
|||
IDS.put(7348, "OPEX CORPORATION"); |
|||
IDS.put(7390, "Telecommunications Technology Association (TTA)"); |
|||
IDS.put(7434, "Visteon Corporation"); |
|||
IDS.put(7465, "Horng Tong Enterprise Co., Ltd."); |
|||
IDS.put(7501, "Pegatron Corporation"); |
|||
IDS.put(7516, "Fresco Logic Inc."); |
|||
IDS.put(7529, "Walta Electronic Co., Ltd."); |
|||
IDS.put(7543, "Yueqing Changling Electronic Instrument Corp., Ltd."); |
|||
IDS.put(7584, "Parade Technologies, Inc."); |
|||
IDS.put(7647, "L&T Technology Services"); |
|||
IDS.put(7649, "Actions Microelectronics Co., Ltd."); |
|||
IDS.put(7666, "China Telecommunication Technology Labs - Terminals"); |
|||
IDS.put(7668, "SHEN ZHEN FORMAN PRECISION INDUSTRY CO., LTD."); |
|||
IDS.put(7682, "GLOBEMASTER TECHNOLOGIES CO., LTD."); |
|||
IDS.put(7696, "Point Grey Research Inc."); |
|||
IDS.put(7751, "HUNG TA H.T.ENTERPRISE CO., LTD."); |
|||
IDS.put(7758, "Etron Technology, Inc."); |
|||
IDS.put(7795, "COMLINK ELECTRONICS CO., LTD."); |
|||
IDS.put(7818, "HIBEST Electronic (DongGuan) Co., Ltd."); |
|||
IDS.put(7825, "Other World Computing"); |
|||
IDS.put(7863, "WIN WIN PRECISION INDUSTRIAL CO., LTD."); |
|||
IDS.put(7879, "Gefen Inc."); |
|||
IDS.put(7881, "MOSER BAER INDIA LIMITED"); |
|||
IDS.put(7898, "AIRTIES WIRELESS NETWORKS"); |
|||
IDS.put(7956, "Astoria Networks GmbH"); |
|||
IDS.put(7969, "Scosche Industries"); |
|||
IDS.put(7976, "Cal-Comp Electronics & Communications"); |
|||
IDS.put(7977, "Analogix Semiconductor, Inc."); |
|||
IDS.put(7989, "Amphenol ShouhMin Industry (ShenZhen) Co., Ltd"); |
|||
IDS.put(7996, "Chang Yang Electronics Company Ltd."); |
|||
IDS.put(8073, "Dongguan Goldconn Electronics Co., Ltd."); |
|||
IDS.put(8074, "Morning Star Industrial Co., Ltd."); |
|||
IDS.put(8117, "Unify Software and Solutions GmbH & Co. KG"); |
|||
IDS.put(8137, "NXP Semiconductors"); |
|||
IDS.put(8181, "Changzhou Wujin BEST Electronic Cables Co., Ltd."); |
|||
IDS.put(8205, "Belkin Electronic (Changzhou) Co., Ltd."); |
|||
IDS.put(8220, "Freeport Resources Enterprises Corp."); |
|||
IDS.put(8222, "Qingdao Haier Telecom Co., Ltd."); |
|||
IDS.put(8284, "Shenzhen Tronixin Electronics Co., Ltd."); |
|||
IDS.put(8294, "Unicorn Electronics Components Co., Ltd."); |
|||
IDS.put(8334, "Luxshare-ICT"); |
|||
IDS.put(8341, "CE LINK LIMITED"); |
|||
IDS.put(8342, "Microconn Electronic Co., Ltd."); |
|||
IDS.put(8367, "Shenzhen CARVE Electronics Co., Ltd."); |
|||
IDS.put(8382, "BURY GmbH & Co. KG"); |
|||
IDS.put(8384, "FENGHUA KINGSUN CO., LTD."); |
|||
IDS.put(8386, "Sumitomo Electric Ind., Ltd., Optical Comm. R&D Lab"); |
|||
IDS.put(8439, "XIMEA s.r.o."); |
|||
IDS.put(8457, "VIA Labs, Inc."); |
|||
IDS.put(8492, "Shenzhen Linoya Electronic Co., Ltd."); |
|||
IDS.put(8494, "Amphenol AssembleTech (Xiamen) Co., Ltd."); |
|||
IDS.put(8524, "Y Soft Corporation"); |
|||
IDS.put(8550, "JVC KENWOOD Corporation"); |
|||
IDS.put(8564, "Transcend Information, Inc."); |
|||
IDS.put(8566, "TMC/Allion Test Labs"); |
|||
IDS.put(8613, "Genesis Technology USA, Inc."); |
|||
IDS.put(8627, "Dongguan Teconn Electronics Technology Co., Ltd."); |
|||
IDS.put(8644, "Netcom Technology (HK) Limited"); |
|||
IDS.put(8659, "Compupack Technology Co., Ltd."); |
|||
IDS.put(8667, "G-Max Technology Co., Ltd."); |
|||
IDS.put(8679, "Sagemcom Broadband SAS"); |
|||
IDS.put(8695, "Wuerth-Elektronik eiSos GmbH & Co. KG"); |
|||
IDS.put(8707, "Shin Shin Co., Ltd."); |
|||
IDS.put(8709, "3eYamaichi Electronics Co., Ltd."); |
|||
IDS.put(8710, "Wiretek International Investment Ltd."); |
|||
IDS.put(8711, "Fuzhou Rockchip Electronics Co., Ltd."); |
|||
IDS.put(8752, "Plugable Technologies"); |
|||
IDS.put(8756, "T-CONN PRECISION CORPORATION"); |
|||
IDS.put(8831, "Granite River Labs"); |
|||
IDS.put(8842, "Hotron Precision Electronic Ind. Corp."); |
|||
IDS.put(8875, "Trigence Semiconductor, Inc."); |
|||
IDS.put(8888, "Motorola Mobility Inc."); |
|||
IDS.put(8904, "Karming Electronic (Shenzhen) Co., Ltd."); |
|||
IDS.put(8981, "Avery Design Systems, Inc."); |
|||
IDS.put(8993, "iKingdom Corp. (d.b.a. iConnectivity)"); |
|||
IDS.put(9051, "KangXiang Electronic Co., Ltd."); |
|||
IDS.put(9068, "ZheJiang Chunsheng Electronics Co., Ltd."); |
|||
IDS.put(9130, "DOK (HK) Trading Limited"); |
|||
IDS.put(9132, "Marunix Electron Limited"); |
|||
IDS.put(9165, "Avconn Precise Connector Co., Ltd."); |
|||
IDS.put(9184, "BitifEye Digital Test Solutions GmbH"); |
|||
IDS.put(9205, "Speed Conn Co., Ltd."); |
|||
IDS.put(9222, "INSIDE Secure"); |
|||
IDS.put(9292, "Minebea Co., Ltd."); |
|||
IDS.put(9299, "BAANTO"); |
|||
IDS.put(9338, "Suzhou Jutze Technologies Co., Ltd"); |
|||
IDS.put(9355, "DONGGUAN SYNCONN PRECISION INDUSTRY CO. LTD."); |
|||
IDS.put(9382, "Shenzhen Pangngai Industrial Co., Ltd."); |
|||
IDS.put(9422, "Shenzhen Deren Electronic Co., Ltd."); |
|||
IDS.put(9424, "Smith Micro Software, Inc."); |
|||
IDS.put(9453, "ZEN FACTORY GROUP (ASIA) LTD."); |
|||
IDS.put(9481, "Chain-In Electronic Co., Ltd."); |
|||
IDS.put(9514, "SUZHOU KELI TECHNOLOGY DEVELOPMENT CO., LTD."); |
|||
IDS.put(9515, "TOP Exactitude Industry (ShenZhen) Co., Ltd."); |
|||
IDS.put(9525, "ShenZhen Hogend Precision Technology Co., Ltd."); |
|||
IDS.put(9527, "Norel Systems Ltd."); |
|||
IDS.put(9556, "ASSA ABLOY AB"); |
|||
IDS.put(9575, "DongGuan LongTao Electronic Co., Ltd."); |
|||
IDS.put(9577, "DongGuan City MingJi Electronics Co., Ltd."); |
|||
IDS.put(9589, "Weida Hi-Tech Co., Ltd."); |
|||
IDS.put(9593, "Dongguan Wisechamp Electronic Co., Ltd."); |
|||
IDS.put(9613, "Sequans Communications"); |
|||
IDS.put(9636, "ALGOLTEK, INC."); |
|||
IDS.put(9651, "DongGuan Elinke Industrial Co., Ltd."); |
|||
IDS.put(9679, "Corning Optical Communications LLC"); |
|||
IDS.put(9714, "Dongguan Jinyue Electronics Co., Ltd."); |
|||
IDS.put(9723, "RICOH IMAGING COMPANY, LTD."); |
|||
IDS.put(9742, "DongGuan HYX Industrial Co., Ltd."); |
|||
IDS.put(9753, "Advanced Silicon SA"); |
|||
IDS.put(9756, "EISST Limited"); |
|||
IDS.put(9771, "YTOP Electronics Technical (Kunshan) Co., Ltd."); |
|||
IDS.put(9841, "Innovative Logic"); |
|||
IDS.put(9842, "GoPro"); |
|||
IDS.put(9846, "Basler AG"); |
|||
IDS.put(9851, "Palpilot International Corp."); |
|||
IDS.put(9896, "UNIREX CORPORATION"); |
|||
IDS.put(9917, "Integral Memory Plc."); |
|||
IDS.put(9973, "Morning Star Digital Connector Co., Ltd."); |
|||
IDS.put(9984, "MITACHI CO., LTD."); |
|||
IDS.put(9999, "HGST, a Western Digital Company"); |
|||
} |
|||
} |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue