USB 가젯 하드웨어 추상화 계층(HAL)은 다음과 같은 시스템 API를 지원합니다.
- USB 포트 재설정 API: USB 포트 재설정 API는 USB 가젯 HAL v1.1이 필요하며 Android 11 이상을 실행하는 기기에서 사용할 수 있습니다. 이 API를 사용하여 연결된 호스트와 USB 가젯 연결을 재설정합니다.
- USB 대역폭 API: USB 대역폭 API는 USB 가젯 HAL v1.2가 필요하며 Android 12 이상을 실행하는 기기에서 사용할 수 있습니다. 이 API를 사용하여 연결된 USB 기기와 호스트 간의 전송 속도를 얻습니다.
- USB 가젯 HAL 버전 API: USB 가젯 HAL 버전 API는 USB 가젯 HAL v1.2가 필요하며 Android 12 이상을 실행하는 기기에서 사용할 수 있습니다. 이 API를 사용하여 USB 가젯 HAL 버전 번호를 가져옵니다.
USB 가젯 HAL API를 지원하려면 기기 제조업체에서 해당 USB 가젯 HAL 버전을 구현해야 합니다. USB 가젯 HAL API를 사용하려면 시스템 권한 앱이 필요합니다.
USB 가젯 HAL 및 관련 API 찾기
기기 제조업체는 해당 API를 지원하기 위한 USB 가젯 HAL을 구현해야 합니다.
- USB 가젯 HAL의 기본 구현을 찾으려면 다음 경로를 사용합니다.
- 하드웨어 인터페이스 헤더 파일을 찾으려면 다음 경로를 사용합니다.
- API를 찾으려면 다음 경로를 사용하여 AIDL 헤더 파일에서 API를 찾습니다. 이 경로는 API의 Android 프레임워크 진입점이기도 합니다.
android.hardware.usb
:<aosp>/core/java/android/hardware/usb
USB 가젯 HAL 구현
USB 가젯 HAL API를 지원하려면 개발자가 정확한 USB 가젯 HAL 버전을 구현해야 합니다. 시스템 UI 구현은 필요하지 않습니다.
USB 포트 재설정 API용 USB 가젯 HAL v1.1을 구현하려면 대상 기기와 호스트 간의 USB 연결을 재설정합니다.
USB 가젯 HAL API 아키텍처 이해
USB 가젯 HAL API는 모두 android.hardware.usb
패키지에 내장되어 있으며 USB 가젯 HAL을 활용하여 기기와 상호작용합니다. 각 특정 아키텍처에 대한 세부정보는 다음과 같이 관련 탭에 있습니다.
USB 대역폭 API
다음 그림은 USB UDC 커널 위에 빌드되고 android.hardware.usb
패키지를 통해 액세스할 수 있는 USB 대역폭 API의 코드 흐름을 보여줍니다. 이 API는 getCurrentUsbSpeed()
및 updateUsbSpeed()
메서드를 통해 USB 대역폭을 반환합니다.
그림 1.1 USB 대역폭 API의 아키텍처
USB 가젯 HAL 버전 API
다음 그림은 IUSBGadget V1.2 하드웨어 바인더 위에 빌드되고 android.hardware.usb
패키지를 통해 액세스할 수 있는 USB 가젯 HAL 버전 API의 코드 흐름을 보여줍니다.
그림 1.2 USB 가젯 HAL 버전 API의 아키텍처
USB 포트 재설정 API
다음 그림은 USB 가젯 HAL 구현을 포함하여 프레임워크에서 USB 포트 재설정 API의 코드 흐름을 보여줍니다.
그림 1.3 USB 포트 재설정 API 코드 흐름의 예
구현 확인
각 USB 가젯 HAL 버전 및 해당 API에 관한 공급업체 테스트 도구 모음(VTS) 테스트 사례가 있습니다.
USB 대역폭 API 및 USB 가젯 HAL 버전 API
다음 경로에서 USB 가젯 HAL v1.2의 VTS 테스트 사례를 찾습니다.
<aosp>/test/vts-testcase/hal/usb/gadget/V1_2/
USB 가젯 HAL v1.2의 VTS 테스트 사례는 다음 작업을 실행할 수 있는 호스트 측 테스트 사례입니다.
- adb 셸 명령어(
#svc usb getGadgetHalVersion
)를 사용하여 USB 가젯 HAL 버전 API를 호출합니다. - adb 셸 명령어(
#svc usb getUsbSpeed
)를 사용하여 USB 대역폭 API를 호출합니다. - 출력을 확인하여 예상한 값인지 확인합니다.
USB 포트 재설정 API
이 경로를 따라 USB 포트 재설정 API를 위해 구현된 VTS 테스트 사례를 찾습니다.
<aosp>/test/vts-testcase/hal/usb/gadget/V1_1/
USB 포트 재설정 API의 VTS 테스트 사례는 다음 작업을 실행할 수 있는 호스트 측 테스트 사례입니다.
- adb 셸 명령어(
#svc usb resetUsbGadget
)를 사용하여 USB 포트 재설정 API를 호출합니다. - DUT(테스트 대상 기기)가 연결을 해제하고 다시 연결할 수 있는지 확인합니다.