- s_listen_event : processCommandsCallback, listenCallback,
- s_commands_event : listenCallback
- s_wakeupfd_event : eventLoop
- s_debug_event : RIL_register
- s_listen_event : s_fdListen, listenCallback
- s_commands_event : s_fdCommand, processCommandsCallback
- s_wakeupfd_event : s_fdWakeupRead, processWakeupCallback
- s_debug_event : s_fdDebug, debugCallback
所以內容很無聊。
正如變數名稱所說:只是為了 wakeup event loop。
s_debug_event 提供 socket : SOCKET_NAME_RIL_DEBUG 供額外控制 ril 的介面。
s_listen_event 是 Rild 的主要 service socket : SOCKET_NAME_RIL。
這兩個 socket:
#define SOCKET_NAME_RIL "rild"
#define SOCKET_NAME_RIL_DEBUG "rild-debug"
都是在 init.rc 中 create 好:
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
所以在 rild 中只要經過 android_get_control_socket() 從環境變數中取出 socket id 就可以,不用自己 create (bind)。rild 是一對多的 server,所有的 client 經過 SOCKET_RIL 向 rild 取得命令通道,之後就可以和 rild 溝通。
rild 從 s_fdListen 得到 client 的連線 (accept),就keep 這個 connection : s_command_event。
同時,繼續 s_fdListen 的 listen( ),等待另一個 client 的連線。
==> 一般 network server 的作法。
這個 socket base , event callback 的架構中心,就是 libril/ril_event.cpp 的 ril_event_loop().
ril_event_loop 是一個一般化的 event callback loop,就是select block,return if data available
然後call 對應的 callback。
沒有留言:
張貼留言