2011-09-23 6 views
6

삼성 갤럭시 타블렛에서 USB 호스트 기능을 활용하려고합니다. 삼성 (http://www.samsung.com/us/mobile/galaxy-tab-accessories/EPL-1PL0BEGSTA)에서 첨부 동글을 구입했습니다. 처음에이 동글을 통해 USB 장치를 연결했을 때 나는 은하계 태블릿에서 고전력 오류가있었습니다 - FYI는 외부에서 전원이 공급되는 USB 허브를 사용하고 있으며 이것을 바이 패스 할 수 있습니다.삼성 Galaxy 10.1 태블릿에서 Android USB 호스트 문제

첨부 할 때 장치 자체가 USB 주변 기기의 존재를 인정하므로 Android의 android.hardware.usb.UsbDevice를 사용하려고했습니다. import android.hardware.usb.UsbManager; 도서관. 나는 이상한 어떤 장치를 연결할 때이 어떤 의도를 발사되지

IntentFilter usbIntentFilter = new IntentFilter(); 
usbIntentFilter.addAction("android.hardware.usb.action.USB_DEVICE_ATTACHED");   
usbIntentFilter.addAction("android.hardware.usb.action.USB_DEVICE_DETACHED"); 
registerReceiver(mUsbReceiver,usbIntentFilter); 

를 통해 의도를 수신하는 방송 수신기를 등록 USB 장치를 인식하는 두 가지 방법이 확인 ...이 있다는 것을 보았다. 그래서 다음 방법을 시도했다 : 명시 적으로 UsbManager를 통해 장치 목록에 대한 질의 - 다음과 같이이 이루어졌다 :

HashMap<String, UsbDevice> deviceList = manager.getDeviceList(); 
    int count = deviceList.size(); 
    Iterator<UsbDevice> iterator = deviceList.values().iterator(); 

    if(iterator.hasNext()){ 
    UsbDevice deviceVal = iterator.next(); 
    testTxtView1.setText("set device " + deviceVal); 
    } 

이것은 아마도 하나를 잡아 것 (하나의 USB 장치가 현재 Google 문서 당 지원) 현재 연결된 USB 장치. 이것을 테스트하기 위해 버튼 클릭시 위의 코드를 호출하고 장치 결과를 표시합니다. 어떤 이유로 든 USB 동글이 연결되어 있는지 여부에 관계없이 매번 장치 목록에서 장치를 가져옵니다. 또한이 장치는 USB 동글 (또는 동봉 품 없음)에 관계없이 매번 동일합니다.

장치 usbDevice [mName =/dev/bus/usb/001/002, mVendorId = 1256, mProductId = 27033, mClass = 0, mSubClass = 0, mProtocol = 0, mInterfaces = [Landroid .os.Parcelable; @ 406ff4d8]를 @ 406ff4d8 값 ^^

가 (난 그냥 그것의 단일 인스턴스를 넣어)이 코드를 조회 할 때마다 변경이

나는 모든 곳에서 검색하고 수 없었다 내 상황에 적용될 수있는 유사한 문제 또는 해결책을 찾으십시오. 나는 Google의 USB 예제를 구현하려고 시도했는데 (정확히 본질적으로, 나는 그것들을 찢어 버렸다) 이러한 문제에 부딪 히고있다.

나는 또한 내 매니페스트의 메이크업 언급해야한다 :

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="edu.mit.ll.drm4000" 
    android:versionCode="1" 
    android:versionName="1.0"> 
<uses-feature android:name="android.hardware.usb.host" /> 
<uses-sdk android:minSdkVersion="12" /> 

<application android:icon="@drawable/icon" android:label="@string/app_name"> 


    <activity android:name=".DRM4000Activity" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

     <intent-filter> 
      <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> 
     </intent-filter> 

     <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" 
      android:resource="@xml/device_filter" /> 

    </activity> 

</application> 

및 장치 필터 :


(나는 제거를 장치 필터의 기준을 만 d에 관한 특정 정보를 삽입하려고 시도했습니다. evice 찾고 있습니다 ... 둘 다 아무 소용이 없습니다.)

이 문제에 대한 도움을 많이 주시면 감사하겠습니다!


또 다른 업데이트 : 불평 장치는 약 항상 장치 목록에 열거 된

장치 usbDevice [MNAME =는/dev/버스/USB// 002 001, mVendorId = 1256, mProductId = 27033, mClass = 0, mSubClass = 0, mProtocol = 0, mInterfaces = [Landroid.os.Parcelable, @ 406ff4d8]

은 안드로이드 쪽 USB 포트 또는 다른 것이어야합니다.내 코드에 여러 장치를 연결하기 시작했기 때문에 (이 링크와 유사 : USB_DEVICE_ATTACHED Intent not firing) HID 장치, arduino 장치 및 슬프게도 ... USB 장치가 의도를 실행하거나 열거 된 것으로 나타나지 않습니다. USB 허브. USB 플래시 드라이브를 사용해 보았지만 열거하고 작동했습니다 ... 그러나 목록에있는 두 번째 장치로 표시됩니다. 첫 번째 장치는 위에 나열된 USB 장치입니다. 의향은 그것으로 불을 낸다.

일부 안드로이드 선택을 제외하고 HID 장치 및 다른 USB 장치로 인 텐트를 만드는 것에 대한 해결 방법을 아는 사람이 있습니까?

+0

다른 응용 프로그램에서 USB 호스트가 작동하는지 확인할 수 있습니까? PTP 카메라를 연결하고 갤러리가 방송중인 의도를 알았는지 확인하십시오. 재부팅을 시도하고 Tab을 최신 버전으로 업데이트했다고 가정합니다. –

+0

키보드를 연결하면 작동하는 것 같습니다. 나는 그것을 연결할 때 "USB 장치 연결"메시지가 나타납니다. 그러나 위의 코드는 키보드 나 다른 USB 장치가 연결되어 있거나 아무것도 연결되어 있지 않은 동일한 출력을 제공합니다. USB 장치에 관계없이.나는 키보드가 잘된 것으로부터 내 코드가 있어야한다는 것을 알고있다. BTW : 다른 장치를 연결할 때 "Unknown USB Device Connected"라고 표시됩니다. – hinklecw

+0

다른 업데이트 : 장치 목록에서 항상 열거되는 것에 대해 불만을 표시 한 장치는 안드로이드 USB 포트 또는 다른 장치 여야합니다. 장치를 내 코드에 추가하면 (USB_DEVICE_ATTACHED 인 텐트가 실행되지 않음) HID 장치, arduino 장치 및 USB 장치가 의도를 실행하거나 USB 허브에 의해 열거되지 않습니다. USB 플래시 드라이브를 사용해 보았지만 열거하고 작동했습니다 ... 그러나 목록에있는 두 번째 장치로 표시됩니다. 첫 번째 장치는 위에 나열된 USB 장치입니다. 의향은 그것으로 불을 낸다. – hinklecw

답변

4

SOO 불행히도 삼성 갤럭시 타블렛은 UsbManager와 전세계 USB 장치의 절반 정도만 제대로 작동하지 않는 것처럼 보입니다. 삼성의 커널은 저장 장치 등의 의도를 발동하는 것처럼 보이지만 HID 및 기타 임의의 장치 (예 : arduino, usb 센서, HID 장치는 해당되지 않습니다.)는 삼성 커널의 버그 인 것 같습니다. 흥미롭게도 HID 장치는 태블릿에서 작동하지만 UsbManager에서는 열거되지 않습니다. 나는 같은 문제의 몇 가지 링크를 발견했으며, 커널 패치 (또는 에이서 태블릿)가이 atm 주위의 유일한 방법 인 것처럼 보인다. 잘만되면 삼성은 미래에 고칠 것이다. 다음은 커널을 다시 빌드하는 것이 중요하고 실제로 UsbManager가 작동해야하는 경우 커널 패치를 한 사람에게 연결되는 링크입니다. 나는 시험하지는 않았지만 결국 계획을 세우고 내 생각에 대해 의견을 남깁니다. 장치를 열거 한 후 device.getdeviceName를 사용하여 문자열에서 장치 이름을 저장할 수) http://forum.xda-developers.com/showthread.php?t=1233072

+0

링크 된 커널 패치는 여기에 적용되지 않습니다. 삼성 갤럭시 탭 7 "을위한 것이지만 부모님은 벌써 매니큐스트에서 최소 SDK로 Honeycomb을 타겟팅하고 있기 때문에 삼성 갤럭시 탭 10.1에 대해 이야기하고 있습니다 –

+0

삼성에서 USB 호스트 모드를 사용할 수있는 업데이트가 있는지 아직 알 수 없습니다 나는 아무런 문제없이 Acer Iconia 500을 사용하고있다. 아무 문제없이 모든 것이 작동한다. 나는 삼성에서도 그것을 갖고 싶어한다. – user387184

0

삼성 전자는 안드로이드 커널 인

1

내가 직면하고 같은 문제에서 USB API를 제거했지만 하나의 방법 장치 이름을 (사용할 수 있습니다() 메소드를 호출합니다.

기기의 전체 정보에서 정확한 기기 이름을 얻을 수 있습니다.

0

리소스/xml/device_filter.xml에서 인식 할 장치를 정의해야한다고 생각합니다. 안드로이드 API를 참조 할 수 있습니다.

-2

내 Arduino Uno를 내 삼성 갤럭시 탭 10 P7500에 연결했습니다. 연결에 문제가있는 경우 타블렛이 외부 전원이없는 USB 장치에 대한 사용 권한을 거부하기 때문입니다. 처음으로 5V 또는 3.3V AC/DC 어댑터를 사용하여 장치를 외부에 연결해보십시오. 장치가 연결되어있는 것을 확인하고 전원 어댑터를 뽑으면 장치가 외부 전원없이 작동합니다 (태블릿 자체). USB를 통해 힘을 줄 것이다 OTG

0

HID 장치를 볼 수없는 또 다른 (불쾌한) 이유가있을 수 있습니다.

UsbHostManager.beginUsbDeviceAdded() "새 USB 장치를보고하려면 monitorUsbHostBus()에서 JNI에서 호출됩니다." 이 메소드는 private 메소드 isBlackListed()을 호출합니다.이 메소드는 무조건 모든 HUB의 필터를 제거하고 HID는 서브 클래스 BOOT를 필터링합니다. 당신이 할 때 HID 장치가 보이지 않는 이유가 여기에 있습니다.

누군가가 이것에 대한 해결책을 가지고 있다면, 나는 거기에 상당한 액수의 사용자가 있다고 생각합니다.