111128_死海_281

 
 
  

NeilChen0710 發表在 痞客邦 留言(1) 人氣()

111128_耶路撒冷_099
 
 

NeilChen0710 發表在 痞客邦 留言(0) 人氣()

111113_桂輔心怡婚禮宴客_045
 
 

NeilChen0710 發表在 痞客邦 留言(0) 人氣()

111111_桂輔心怡大喜之日_-192

 

 

NeilChen0710 發表在 痞客邦 留言(0) 人氣()

1. WIFI JAVA layer:
1.1. android系統啟動WIFI 模組時,它將調用 Wifiserver 類的setWifiEnabledBlocking函數。
1.2. 在該函數中,如果是使能WIFI, 它將做四件事:
    a. load wifi driver.
    b. 啟動wpa_supplicant.
    c. 啟動 event loop.
    d. 更新wifi的狀態.
2. WIFI Native layer:
2.1. java層調用 loadDriver, 它實際上是通過JNI來調用Native函數, JNI->android_net_wifi_loadDriver ->wifi_load_driver
wifi_load_driver函數中,它將首先通過system property -- wlan.driver.status 的狀態來判斷驅動是否已經載入。如果沒有載入,將會載入該驅動。
2.2. java層調用startSupplicant時,它實際上是通過JNI調用到wifi_start_supplicant函數,
wifi_start_supplicant函數裏,首先確定wpa supplicant的配置檔存在,如果不存在,將默認配置檔拷貝到相應目錄下,下面是配置檔的默認路徑和工作路徑:
static const char SUPP_CONFIG_TEMPLATE[]= "/system/etc/wifi/wpa_supplicant.conf";
static const char SUPP_CONFIG_FILE[]    = "/data/misc/wifi/wpa_supplicant.conf";
然後,調用control_supplicant函數, 如果這時wpa_supplicant還沒有啟動, 將會啟動wpa_supplicant.
2.3. java層通過connectToSupplicant調用wifi_connect_to_supplicant函數,在該函數中,將通過wpa_ctrl_open函數分別創建兩個AF_UNIX位址族和資料報方式的socket,一個是ctrl_conn, 用於向wpa_supplicant發送命令並接收response, 另一個是monitor_conn, 它一直阻塞等待從wpa_supplicant過來的event。最後,通過monitor_connwpa_supplicant發送命令ATTACH,用於將自己的socket資訊註冊到wpa_supplicant, 由於socket是資料報方式的,這一步是必須的,對於存在於wpa_supplicant的伺服器端,它是所有用戶端共用的,由於它需要主動向monitor_conn用戶端發送事件,所以它必須先記錄下該用戶端的詳細資訊,wpa_supplicant就可以將EVENT發向該socket
在完成上面這些操作後,java層會通過jni方式調用函數android_net_wifi_waitForEvent(應該是起一個線程,線上程裏調用),該函數會調用wifi_wait_for_event,在wifi_wait_for_event函數裏,會阻塞接收從wpa_supplicant模組傳來的事件,一旦wpa_supplicant模組有事件發,wifi_wait_for_event接收到後,會將包含事件的buf通過函數參數的方式回傳到java層,java收到事件後,再繼續調用wifi_wait_for_event函數進行阻塞等待接收,從而完成一個迴圈。
2.4. 以上的流程完成以後,WIFI java layer 調用的WIFI native api 就和wpa_supplicant進程就建立了聯繫,WIFI java layer就可以向wpa_supplicant發送命令和接收response, 並且wpa_supplicant也可以主動向WIFI java layer發送事件了。

NeilChen0710 發表在 痞客邦 留言(0) 人氣()

一、WIFI的基本架構
    1、wifi用戶空間的程式和庫:
         external/wpa_supplicant/
       生成庫libwpaclient.so和守護進程wpa_supplicant。

NeilChen0710 發表在 痞客邦 留言(1) 人氣()

111024_老婆生日_004





NeilChen0710 發表在 痞客邦 留言(0) 人氣()

111008_BuddyBuddy_017.jpg
        
熱衷於美式漢堡的夫妻檔終於在這一日找到離家最近的非連鎖漢堡店,BuudyBuddy。一進門很簡單的就可以發現到老闆應該是個衝浪愛好者,整間店感覺彷彿置身夏威夷,就只差沒有把沙子搬進來裝潢。
 

NeilChen0710 發表在 痞客邦 留言(0) 人氣()

(1)Android.mk檔首先需要指定LOCAL_PATH變數,用於查找原始檔案。由於一般情況下

    
  Android.mk和需要編譯的原始檔案在同一目錄下,所以定義成如下形式:
    
  LOCAL_PATH:=$(call my-dir)
    
  上面的語句的意思是將LOCAL_PATH變數定義成本檔所在目錄路徑。

       (2)Android.mk中可以定義多個編譯模組,每個編譯模組都是以include $(CLEAR_VARS)開始以include $(BUILD_XXX)結束。

    
   include $(CLEAR_VARS)
    
   CLEAR_VARS由編譯系統提供,指定讓GNU MAKEFILE為你清除除LOCAL_PATH以外的所有LOCAL_XXX變數,
    
   如LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES等。

    
   include $(BUILD_STATIC_LIBRARY)表示編譯成靜態庫
    
   include $(BUILD_SHARED_LIBRARY)表示編譯成動態庫。
    
   include $(BUILD_EXECUTABLE)表示編譯成可執行程式

    
   (3)舉例如下(frameworks/base/libs/audioflinger/Android.mk):

java代碼:

NeilChen0710 發表在 痞客邦 留言(0) 人氣()


  

NeilChen0710 發表在 痞客邦 留言(0) 人氣()

110927_DUBU_019.jpg
 
 
今天來位大家介紹一家DUBU DUBU豆腐鍋。外表看起來還滿清爽乾淨的一家韓式簡餐店,有煲有飯還有水餃、辣炒年糕之類的。
 

NeilChen0710 發表在 痞客邦 留言(0) 人氣()

很好的一篇文章
原文出處:http://joanne7195.pixnet.net/blog/trackback/1d462674bd/55766746

NeilChen0710 發表在 痞客邦 留言(0) 人氣()

1 2 3 4 5
Blog Stats
⚠️

成人內容提醒

本部落格內容僅限年滿十八歲者瀏覽。
若您未滿十八歲,請立即離開。

已滿十八歲者,亦請勿將內容提供給未成年人士。