天天看點

HDMI的拔插的uevent的流程

1.kernel:

   /drivers/video/rockchip/hdmi/rk_hdmi_task.c:

     當拔插中斷産生的時候,就會調用:

        switch_set_state(&(hdmi->switch_hdmi), state);來改變hdmi   state 節點的的狀态值。

2.linux的uevent的架構,接收到狀态發生改變的後,向 android的層,通過socket發送一條變化資訊。

3.hardware/libhardware_legacy/uevent/uevent.c:

    uevent_next_event(char* buffer, int buffer_length);

4.framework/base/core/jni/android_os_UEventObserver.cpp:

   java通過jni擷取到uevent的資訊,static jstring nativeWaitForNextEvent(JNIEnv *env, jclass clazz)

5.對需要監聽的uevent資訊進行比對:

    static bool isMatch(const char* buffer, size_t length)。

6./core/java/android/os/UEventObserver.java:java層監聽:

                 while (true) {

                 String message = nativeWaitForNextEvent();

                 if (message != null) {

-                    if (DEBUG) {

-                        Log.d(TAG, message);

                     sendEvent(message);

                 }

隻是簡單記錄了下。