저는 Android 3.2에서 USB 호스트 기능을 사용하는 프로젝트를 진행하고 있습니다. 나는 일반적으로 USB/시리얼 통신에 관한 지식과 재능이 절망적 인 부족으로 고통 받고있다. 나는 또한 내가해야 할 일에 대한 좋은 예제 코드를 찾을 수 없다.Android USB 호스트 통신
USB 통신 장치에서 읽어야합니다.
예는 : 나는 (내 PC에) 퍼티를 통해 연결하면 내가 입력 :
>GO
그리고 디바이스 나에 대한 데이터를 밖으로 분출 시작합니다. 피치/롤/온도/체크섬.
예는 :
$R1.217P-0.986T26.3*60
$R1.217P-0.986T26.3*60
$R1.217P-0.987T26.3*61
$R1.217P-0.986T26.3*60
$R1.217P-0.985T26.3*63
나는 'GO'의 에코를받는 시간에 안드로이드 장치에서 초기 'GO'명령을 보낼 수 있습니다.
다음에 이어지는 읽기에는 아무 것도 표시되지 않습니다.
어떻게 할 수 있습니까 : 1) 'go'명령을 보내십시오. 2) 결과로 나오는 데이터 스트림을 읽습니다.
내가 사용하고있는 USB 장치에는 다음 인터페이스 (끝점)가 있습니다.
장치 클래스 : 통신 장치 (0x2로)
인터페이스 :
인터페이스 # 0 등급 : 통신 장치 (0x2로) 엔드 포인트 # 0 방향 : 인바운드 (0x80으로) 유형 : Intrrupt (0x3으로) 폴링 간격 : 255 최대 패킷 크기 : 32 속성 : 000000011
인터페이스 # 1 클래스 : 통신 드 그 클래스 (CDC) (0xa는) 엔드 포인트 # 0 주소 : 129 수 : 1 방향 : 인바운드 (0x80으로) 유형 : 벌크 (0x2로) 폴링 간격 (0) 최대 패킷 크기 : 32 속성 : 000,000,010
엔드 포인트 # 1 주소 : 2 수 : 2 방향 : 아웃 바운드 (0x0으로) 유형 : 벌크 (0x2로) 폴링 간격 (0) 최대 패킷 크기 : 32 속성 : 000000010
권한을 처리하고, 장치에 연결하고, 올바른 인터페이스를 찾고 끝점을 할당 할 수 있습니다. 나는 초기 명령을 보내기 위해 사용할 기술을 알아내는 데 어려움을 겪고있다. 행운과 bulkTransfer와 controlTransfer의 다른 조합을 시도했습니다.
감사합니다.
나는 아래와 같이 인터페이스 # 1을 사용하고 있습니다 :
public AcmDevice(UsbDeviceConnection usbDeviceConnection, UsbInterface usbInterface) {
Preconditions.checkState(usbDeviceConnection.claimInterface(usbInterface, true));
this.usbDeviceConnection = usbDeviceConnection;
UsbEndpoint epOut = null;
UsbEndpoint epIn = null;
// look for our bulk endpoints
for (int i = 0; i < usbInterface.getEndpointCount(); i++) {
UsbEndpoint ep = usbInterface.getEndpoint(i);
Log.d(TAG, "EP " + i + ": " + ep.getType());
if (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) {
if (ep.getDirection() == UsbConstants.USB_DIR_OUT) {
epOut = ep;
} else if (ep.getDirection() == UsbConstants.USB_DIR_IN) {
epIn = ep;
}
}
}
if (epOut == null || epIn == null) {
throw new IllegalArgumentException("Not all endpoints found.");
}
AcmReader acmReader = new AcmReader(usbDeviceConnection, epIn);
AcmWriter acmWriter = new AcmWriter(usbDeviceConnection, epOut);
reader = new BufferedReader(acmReader);
writer = new BufferedWriter(acmWriter);
}
, 어떻게, 0 인터페이스 기능 것입니다 무슨 목적으로 인터페이스 1, 인터럽트 인터페이스에 사용되는 선택 했습니까? 감사! – Rachael