2012-02-16 3 views
0

Windows 컴퓨터에 연결하면 직렬 장치로 인식되어 COM 4 포트에 할당되는 타사 USB 장치가 있습니다. 직렬 포트를 통해 연결된 장치와 마찬가지로 장치와 통신 할 수 있습니다. 예를 들어, USB 연결을 통해 장치에 "abc"를 순차적으로 쓸 수 있습니다.Android 3.1+ USB를 가상 COM 포트로 사용

나는 안드로이드에서 비슷한 일을 할 방법을 찾고있다. Usb Host 메소드를 사용하고 UsbManager를 사용하여 UsbDevice를 열면 2 개의 엔드 포인트가있는 하나의 인터페이스를 얻을 수 있습니다. UsbDeviceConnection에있는 메서드를 사용하여 컨트롤 메시지를 보내려고했지만이 메서드는 -1을 모두 반환합니다. 그러나 그 메서드의 매개 변수로 사용해야하는 내용을 모르겠습니다.

내가 쓸 수있는 OutputStream을 가져 와서 USB 장치로 바이트를 보낼 수있는 방법이 있습니까? 지금 당장 가상 COM 포트 드라이버를 포함하도록 커널을 다시 컴파일하고이를 수행 할 수있는 원시 코드를 작성합니다.

감사합니다.

편집 : USB 변환 회로에 FTDI 직렬을 사용하고 있습니다. Android와 호환됩니까?

+0

당신은 설명하거나 나에게 당신이 장치와 통신 핸들 방법에 대한 링크를 제공하시기 바랍니다 수 있습니다. 나처럼 시나리오를 처리해야하지만 FTDI 직렬을 통해 USB 변환기로 직렬 포트로 안드로이드 장치에서 데이터를 보낼 수 있는지 모르겠다. –

답변

1

장치의 Linux 커널이 FTDI를 지원하는 경우이 장치를 일반 COM 포트로 액세스 할 수 있습니다. 이름은 /dev/ttyUSB0입니다.

커널이 이러한 유형의 장치를 지원하지 않으면 UsbHost 인터페이스를 사용하여 드라이버를 직접 작성할 수 있습니다. 커널의 FTDI 드라이버 소스 코드를 확인하십시오. 당신이 휴대 전화를 응원하고 몇 가지 C를 작성 괜찮다면

+1

감사! 좀 더 연구를 해본 결과 안드로이드 애플리케이션 내에서 com 포트처럼 액세스하고 싶다면 루트 액세스가 필요합니다. 다른 방법은 안드로이드 응용 프로그램의 내부에 "소프트 드라이버"를 작성하는 것입니다. 이것은 시장에서 "일방적으로"일하기를 원할 경우 최선의 방법이라고 주장 할 수 있습니다. Android USB API를 통해 제어 전송 명령을 전송하여 전송 속도, 정지 비트 등을 설정 한 다음 1 바이트 bulkTransfer()로 for 루프를 사용할 수 있습니다. 나는 이것이 [이] (http://slickdevlabs.com/slick-usb-2-serial-library/)의 작동 방식이라고 믿는다. – ZachM

0

, 당신은 여기에 안드로이드 드라이버를 사용하여 안드로이드에 FTDI와 통신 할 수 있습니다하십시오 libftd2xx-jni.so에가있다

http://www.ftdichip.com/Drivers/D2XX.htm

거기에 C 코드와 연결할 수 있습니다 - 나는 그것을 테스트하고 작동합니다.

0

내 장치에서는이 작업을 수행 할 수 있기 때문에 일반적으로 루트 장치는 권장되지 않습니다. 안드로이드 마켓에 배포 된 공개 응용 프로그램에서는이 작업을 수행 할 수 없으므로 루트 장치는 권장하지 않습니다. 이 경우 나는 그것을 다루는 유일한 방법은 controlTransfer()라고 생각한다.

당신은이 목적을 위해 제 3 자 드라이버를 사용할 수 있습니다
관련 문제