그러냐

안드로이드와 PC간의 USB 통신 (2) 본문

c#

안드로이드와 PC간의 USB 통신 (2)

관절분리 2019. 1. 2. 18:14
반응형

안드로이드와 PC간의 USB 통신 (2)

안드로이드와 PC간의 USB 통신 (1) 에서 이어집니다.

아아아…..

1편을 유용하게 보셨다는 분이 계셔서 연재를 계속 하려고 했는데, 폰을 업데이트 한 이후로 USB 드라이버가 작동하지 않습니다.

드라이버 문제를 해결 할 때 까지 연재는 잠정 중단(…) 입니다. 대신 대략적인 내용은 이 글 하단을 참조해 주세요.

추가: 누가 LG Vu2용으로 제대로 작동하는 드라이버좀 알려주세요. LG 홈페이지에 있는 드라이버는 설치해도 작동하지 않습니다…ㅠㅠ 내가 다시는 LG 폰 쓰나 봐라…

그래도 기본적인 사항들은

Accessory Mode로 통신을 하려면 USB 케이블이 연결된 이후에 PC측에서 초기화 코드를 전송해 주어야 합니다. 전송해야 할 내용들은 AOA 1.0 Protocol 문서에서 찾아 볼 수 있습니다.

https://source.android.com/devices/accessories/aoa.html

libusb의 usb_control_msg() 함수를 사용 해 초기화 코드를 전송합니다.

초기화 코드가 전송되면 두 가지 일이 발생합니다.

  1. 안드로이드 장치에서는 USB 연결 모드가 MTP에서 Accessory로 변경됩니다.
  2. PC에서는 지금까지 연결되어 있던 USB 장치가 사라지고, 새로운 USB 장치가 연결됩니다.

Accessory Mode

안드로이드 기기의 화면 최 상단의 알림 바에 메시지가 출력되기 때문에 곧바로 알 수 있습니다.

Accessory에 연결된 App이 없다면 경고 메시지가 출력되고, 연결된 App이 존재하면 해당 App이 실행됩니다. SDK 문서를 참고해서 App을 Accessory에 연결시킬 수 있습니다.

http://developer.android.com/intl/ko/guide/topics/connectivity/usb/accessory.html

PC쪽의 처리

새 장치가 연결되면 그것을 열어서 안드로이드의 App과 통신할 수 있습니다. 기존의 장치가 각 제조사의 Vendor ID와 Product ID를 가진 것과 달리 Accessory 모드 진입 후 새로 연결되는 장치는 Google의 Vendor ID와 Product ID를 가지고 있습니다.

Google의 VID와 PID는 AOA 1.0 프로토콜 문서에 설명되어 있듯이, VID = 0x18D1, PID = 0x2D00입니다. 안드로이드 기기에 USB Debug가 활성화 되어 있을 경우(개발 중에는 항상 켜져 있겠죠?)에는 PID가 0x2D01입니다. 두 가지 장치 모두 드라이버가 등록되어 있어야 항상 올바르게 작동할 겁니다.

해당 장치를 열면 libusb의 usb_bulk_write()와 usb_bulk_read() 함수를 사용해 데이터를 주고 받을 수 있습니다.


출처 : https://medium.com/@yeongtaek.ham/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%EC%99%80-pc%EA%B0%84%EC%9D%98-usb-%ED%86%B5%EC%8B%A0-2-518af9135577

반응형