Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
WiredAccessoryObserver用来处理kernel通知耳机插拔事件,不够它只监听有线音频外设连接,其他无线的耳机在其他模块维护。
WiredAccessoryObserver继承自UEventObserver, UEventObserver用于接收Uevent的一个类,内部维护一个线程,用于接收UEvent事件,通过调用它的StartObserving()来告诉UEventObserver要监听什么样的UEvent,当事件到来的时候会调用对应的onUEvent()来处理。
初始化一:
WiredAccessoryObserver接收audio jack/hdmi audio/usb audio这三个事件.
每种外设会被定义成一个UEventInfo用于保存它的状态。
WiredAccessoryManager.java:
private List<UEventInfo> makeObservedUEventList() {
List<UEventInfo> retVal = new ArrayList<UEventInfo>();
UEventInfo uei;
//audio jack事件注册
// Monitor h2w
if (!mUseDevInputEventForAudioJack) {
uei = new UEventInfo(NAME_H2W, BIT_HEADSET, BIT_HEADSET_NO_MIC, BIT_LINEOUT);
if (uei.checkSwitchExists()) {
retVal.add(uei);
} else {
Slog.w(TAG, "This kernel does not have wired headset support");
}
}
//usb audio事件注册
// Monitor USB
uei = new UEventInfo(NAME_USB_AUDIO, BIT_USB_HEADSET_ANLG, BIT_USB_HEADSET_DGTL, 0);
if (uei.checkSwitchExists()) {
retVal.add(uei);
} else {