개인 공부

Android - USB Serial 통신 ( AOA - Android Open Accessory)

Machine_웅 2022. 9. 19. 10:36
728x90
반응형

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를 통한 통신으로 진행되게 된다.


 
 
 
 
AOA의 재미있는 특징 중에 Manifest 를 통해서 호스트가 통신하기 원하는 앱을 직접 선택할 수 있는 기능이 있다. 안드로이드 앱이 인스톨 될 때 Manifest를 등록하고, 상기 그림2의 4)번에서 호스트가 식별자를 전달할 때 이 식별자와 매칭 되는 Manifest를 등록한 앱이 자동으로 실행되고 USB를 통해서 호스트와 통신하게 된다. 
사용자 입장에서는 호스트(PC)와 연결된 이후 별도로 앱을 찾아서 실행시켜야 하는 번거로움이 줄어들게 된다. 이는 개발자에게도 사용자로부터 들어오는 ‘프로그램이 동작하지 않는다’ 거나 ‘PC와 연결한 이후 어떻게 진행해요 하는가?’ 와 같은 넌센스콜을 줄일 수 있는 이점이 있다.

 

 


액세서리 사용

사용자가 USB 액세서리를 Android 지원 기기에 연결할 때

Android 시스템은 애플리케이션이 연결된 액세서리에 관심을 보이는지 확인할 수 있습니다.

 

관심을 보이는 경우 필요하다면 액세서리와의 통신을 설정할 수 있습니다.

통신을 설정하려면 애플리케이션에서 다음과 같이 해야 합니다.

 

  1. 액세서리 연결 이벤트를 필터링하는 인텐트 필터를 사용하거나 연결된 액세서리를 열거하고 적절한 액세서리를 검색하여 연결된 액세서리를 찾습니다.
  2. 액세서리와 통신할 수 있는 권한이 아직 없다면 권한을 사용자에게 요청합니다.
  3. 적절한 인터페이스 엔드포인트에서 데이터를 읽고 쓰는 방식으로 액세서리와 통신합니다.

■ Android Manifest

  §  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>
■ accessory_filter.xml
*  리소스 파일을 res/xml/accessory_filter.xml에 저장해야 합니다

  §  meta-data를 통해 설정될 장치 설정
  §  포함될 내용
     ü  manufacturer : 장치 제조 업체
     ü  model : 연결된 장치
     ü  version : 연결된 장치의 버전
<?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 

 

USB 액세서리 개요  |  Android 개발자  |  Android Developers

USB 액세서리 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. USB 액세서리 모드를 통해 사용자는 Android 지원 기기용으로 특별히 설계된 USB 호스트 하드

developer.android.com

https://blog.devguru.co.kr/2021/06/aoa-usb.html

 

AOA를 통한 안드로이드 USB통신

기기들이 서로간에 통신하는 많은 방법들이 존재하고 있지만 근거리에서 유선을 사용하려면 USB 방식이 가장 대중적이고 편리한 방법이다. 안드로이드(Android) 에서도 USB를 지원하며 다양한 기기

blog.devguru.co.kr

 

728x90
반응형