packages/apps/Settings/src/com/android/settings/bluetooth/BluetoothSettings.java
onCreateOptionsMenu(Menu menu, MenuInflater inflater)
创建菜单,里面有MENU_ID_SCAN,MENU_ID_RENAME_DEVICE,MENU_ID_VISIBILITY_TIMEOUT,MENU_ID_SHOW_RECEIVED
onOptionsItemSelected(MenuItem item)
菜单对应的执行操作
(1)Bluetoothd daemon
external/bluetooth/bluez/src/main.c
main
|——init_defaults 填充main_opts
|——g_option_context_new 下面四步是参数解析相关
|——g_option_context_add_main_entries
|——g_option_context_parse
|——g_option_context_free
|——daemon(0, 0) 参数为0,则将输出都定向到/dev/null
|——__btd_log_init 打印一些log
|——agent_init
|——connection = dbus_bus_get (DBUS_BUS_SYSTEM, NULL)
|——connect_dbus()
|——g_dbus_setup_bus 注册dbus连接,并重命名为"org.bluez"
|——manager_init(conn, "/") 设置base_path
|——g_dbus_register_interface 注册interface,包括medhod,signal
|——set_dbus_connection(conn) 设置connection为conn
|——start_sdp_server 初始化sdp协议
|——init_server
|——创建l2cap_sock套接字
|——bind l2cap_sock
|——listen l2cap_sock
|——listen unix_sock
|——io = g_io_channel_unix_new(l2cap_sock)
|——g_io_add_watch(io,, io_accept_event, &l2cap_sock) 等待对方connect
|——accept l2cap_sock/unix_sock操作
|——plugin_init
|——执行plugin init
|——g_main_loop_new
|——adapter_ops_setup
|——ops->setup()
|——rfkill_init 电源操作
|——g_main_loop_run
/********************** main结束 ************************/
hciops_init
|——btd_register_adapter_ops(&hci_ops, FALSE);
|——g_slist设置,将ops保存
hciops_setup
|——socket(,SOCK_RAW, BTPROTO_HCI)
|——hci_filter_set_ptype HCI_EVENT_PKT/EVT_STACK_INTERNAL设置过滤
|</