Android는 두 가지 모드,
USB 액세서리 및 USB 호스트 모드를 통해
다양한 USB 주변기기 및 Android USB 액세서리를 지원합니다.
(Android 액세서리 프로토콜을 구현하는 하드웨어)
<USB 액세서리 모드>
USB 액세서리 모드에서 외부 USB 하드웨어는 USB 호스트 역할을 합니다.
액세서리의 예로는 로봇 컨트롤러, 도킹 스테이션, 진단 및 음악 장비, 키오스크, 카드 리더 등이 있습니다.
이러한 액세서리를 통해 호스트 기능이 없는 Android 지원 기기에서 USB 하드웨어와 상호작용할 수 있습니다.
- Android USB 액세서리는 Android 지원 기기와 함께 작동하도록 설계되어야
하며 Android 액세서리 통신 프로토콜을 준수해야 합니다.
<USB 호스트 모드>
USB 호스트 모드에서 Android 지원 기기는 호스트 역할을 합니다.
기기의 예로는 디지털 카메라, 키보드, 마우스 및 게임 컨트롤러가 있습니다.
광범위한 애플리케이션 및 환경을 위해 설계된 USB 기기는
기기와 적절하게 통신할 수 있는 Android 애플리케이션과 계속 상호작용할 수 있습니다.
1) 연결되는 다른 USB 장치가 Host라면 Android 기기는 Device가 되어야 하고
2) 반대로 안드로이드 기기가 Host로 동작하고 연결되는 장치가 Device가 되는 경우가 있을 수 있다.
안드로이드 기기를 PC와 연결할 때가 1)번의 모습이고,
안드로이드 기기에 USB마우스나 저장장치(Mass Storage)를 연결하는 경우가 2)번이 된다.
AOA를 이용하는 절차는 아래 그림과 같이
1)정상적인 연결
2)AOA 프로토콜을 지원하는 장치인지 확인
3)지원 버전 확인
4)식별자 전송
5)액세서리 모드 시작 명령
6)안드로이드에서 모드 변경
7)재 연결 8)Bulk Endpoint를 통한 통신으로 진행되게 된다.
액세서리 사용
사용자가 USB 액세서리를 Android 지원 기기에 연결할 때
Android 시스템은 애플리케이션이 연결된 액세서리에 관심을 보이는지 확인할 수 있습니다.
관심을 보이는 경우 필요하다면 액세서리와의 통신을 설정할 수 있습니다.
통신을 설정하려면 애플리케이션에서 다음과 같이 해야 합니다.
- 액세서리 연결 이벤트를 필터링하는 인텐트 필터를 사용하거나 연결된 액세서리를 열거하고 적절한 액세서리를 검색하여 연결된 액세서리를 찾습니다.
- 액세서리와 통신할 수 있는 권한이 아직 없다면 권한을 사용자에게 요청합니다.
- 적절한 인터페이스 엔드포인트에서 데이터를 읽고 쓰는 방식으로 액세서리와 통신합니다.
§ intent-filter로 USB_ACCESSORY_ATACED, 연결 감지
§ meta-data 설정을 통해서 연결될 장치 설정
<manifest ...>
<uses-feature android:name="android.hardware.usb.accessory" />
<uses-sdk android:minSdkVersion="<version>" />
...
<application>
<uses-library android:name="com.android.future.usb.accessory" />
<activity ...>
...
<intent-filter>
<action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
android:resource="@xml/accessory_filter" />
</activity>
</application>
</manifest>
§ meta-data를 통해 설정될 장치 설정
§ 포함될 내용
ü manufacturer : 장치 제조 업체
<?xml version="1.0" encoding="utf-8"?>
<resources>
<usb-accessory model="DemoKit" manufacturer="Google" version="1.0"/>
</resources>
https://developer.android.com/guide/topics/connectivity/usb/accessory?hl=ko%20#java
https://blog.devguru.co.kr/2021/06/aoa-usb.html
'개인 공부' 카테고리의 다른 글
Bluetooth Low Energy (BLE) 개념 정리 (0) | 2022.10.17 |
---|---|
Serial 통신 ( 직렬통신 ) (0) | 2022.09.27 |
( 작성중 ) JAVA - 델리게이트, 이벤트 (0) | 2022.09.16 |
BLE 통신 ( 저전력 블루투스 ) (0) | 2022.09.14 |
CI ( Continuous Integration ) (0) | 2022.03.26 |