안드로이드 기반에서 시리얼 통신에 관한 정보를 찾다 글을 보고 왔습니다만
잘 이해가 안되서 글 올립니다.
현재까지 수집한 정보로 안드로이드에서는 시리얼 통신이 안된다고 알고 있었는데 사용할수 있는 방법이 있으면
정보를 얻고 싶습니다.
무례한 부탁일지도 모릅니다만 안드로이드에서 시리얼 통신을 할수 있는 방법이 있으면 자세히좀 알고 싶습니다.
자바로 앱을 만드는 경우와 C나 Pascal 같은 언어로 개발하는 방법 등이 있습니다.
먼저 C나 Pascal 같은 언어로 개발하는 경우에는 일반적으로 PC에서 시리얼 통신 프로그램을 개발하는 것과 동일하며, 크로스 컴파일만 하면 됩니다. 에뮬레이터에서 테스트하기 위해서 장치만 /dev/ttyS2로 설정했습니다.
전 프리 파스칼로 개발했습니다.
자바로 앱을 만들 경우는 조금 복잡합니다. 기본 API에 시리얼통신 관련된 것이 없습니다. 그래서 NDK를 이용하여 C로 시리얼통신을 하는 라이브러리(*.so)를 만들고, 자바에서 JNI를 이용하여 그 라이브러리를 불러다 사용해야 됩니다.
저는 NDK를 이용하여 시리얼 포트를 제어하는 함수를 만들고 그 함수를 JNI를 이용하여 자바로 만든 앱에서 호출했습니다.(회사에서 안드로이드 기반 하드웨어를 개발하고 있는 중이라서 에뮬레이터에서만 동작됨을 확인했습니다)
구글에서 배포하는 NDK 예제 소스가 있으니 참고하시면 됩니다.
NDK나 JNI를 이용하지 않는 방법으로는 C나 Pascal 같은 언어로 시리얼 통신용 프로그램(데몬)을 만들고, TCP Server를 띄우고, 자바로 만든 앱에서 localhost TCP Server에 접속하여 데이터를 요청하면 C로 만든 프로그램(데몬)에서 시리얼포트를 통하여 데이터를 받고, 다시 앱으로 넘겨주는 방법도 있습니다.
C:\android\tools\emulator.exe -avd Android.2.0.1 -verbose -qemu -serial COM4
에러가 위 명령에서 발생하는지요?
먼저 하이퍼터미널 같은 프로그램으로 해당 COM 포트가 오픈되는지 먼저 확인해보세요..
위 명령을 내리기 전에 해당 포트를 오픈하고 있는 다른 프로그램이 있어서는 안되며, -avd 다음에 나오는 Android.2.0.1은 생성하신 Android Virtual Device 명으로 설정해야 됩니다.
저도 왜 에러가 발생되는지 모르겠네요..
Win이라면 관리자 권한으로 실행되었는지도 확인해보시고, 시리얼 포트도 한 번 변경해보세요.
그리고, 제가 블로그에 게시한 시리얼 통신 방법은 단독으로 동작되는 실행 프로그램 형식입니다.
혹시나 앱에서 시리얼 통신을 해야 된다면 위와 같은 방법으로 하는 것보다는 JNI를 이용하는 방법이 좋을 것입니다.