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);
}
隻是簡單記錄了下。