[DevTip] Android - usb-serial-for-android 사용시 baud rate 바꾸기

안드로이드 단말(진저브레드 이상)의 USB OTG를 이용해 UART 통신을 할 때 baud rate 바꾸는 작업이 애매해서 조금 고생했다.

일단, usb-serial-for-android 라이브러리를 이용해서 포트를 열고 원하는 baud rate으로 설정하는 두 가지 방법.
(코드에서 mUsbDriver는 UsbSerialDriver의 instance로, mUsbDriver = UsbSerialProber.acquire(mUsbManager); )

1. 포트 오픈 후 설정 변경
mUsbDriver.open();
mUsbDriver.setParameters(<BaudRate>,<DataBits>,<StopBits>,<ParityBits>);

2. 설정 후 포트 오픈
mUsbDriver.setParameters(<BaudRate>,<DataBits>,<StopBits>,<ParityBits>);
mUsbDriver.open();

물론, 기본(default) baud rate로 사용할 때에는 mUsbDriver.open(); 만 써도 문제는 없다.

두 방법에 차이가 있을까?
결론적으로, 2번의 순서로는 원하는 baud rate으로 동작하지 않는다!
먼저 열고 나서 설정을 바꿔야 제대로 설정이 바뀌는 것을 확인할 수 있다.

실제 usb-serial-for-android 라이브러리의 소스에서 FtdiSerialDriver.java를 보면 open() 메쏘드에서는 항상 기본(default) 설정으로 포트를 설정하기 때문에 반드시 setParameters()가 나중에 호출되어야 한다.
헌데, CP210xSerialDriver.java에서는 setParameters() 메쏘드에서 입력으로 받은 설정 값들을 해당 클래스 내부 멤버 변수로 저장을 해 두고, 이후 open() 메쏘드에서는 그 값들을 사용해 USB-UART 칩셋을 설정하는데도 2번 방법이 제대로 먹히지 않는 것처럼 보인다.
뭔가 시험을 잘못해서 헤매고 있는 걸까?

어쨌든 안전한 방법은, 먼저 open()하고 나중에 setParameters()를 호출하자!
https://code.google.com/p/usb-serial-for-android/를 보면 open() 후에 설정하는 것으로 되어는 있는데, 요게 mandatory한 사항이라고 명시가 안 되어 있어서 삽질을...

댓글

이 블로그의 인기 게시물

환경개선부담금

[DevTip] Windows에서 tail 쓰기...