天天看點

WinCE同步(ActiveSync)問題

同步功能是WinCE一個出色功能,可以通過usb,serial等實體連接配接,與pc端通訊進而實作同步功能.當然,不隻是同步些資料那麼點功能,它還可以同步outlook等,最關鍵的,pc端提供很多軟體包括pb和evc的remote tools這些工具很多時候要和目标裝置連接配接,借由ActiveSyc功能可以輕松達到目标.這樣我們在pc端就可以輕松獲得WinCE裝置的系統資料庫,程序管理,系統資訊等幾乎所有資料和控制.對開發者,可以免除實作KITL的工作,這很誘人!

自動同步功能

    在插入usb或者序列槽的時候,WinCE就會自動啟動同步連接配接,怎麼實作的?打開datasync.db,這個檔案可以在WINCE500/PUBLIC/DATASYNC/OAK/FILES/下找到.有一些bsp會把這個添加到platform.db或者其他的db中.其實這是一個資料庫檔案.檔案頭有包含此資料庫檔案的說明和用法.如下是内容.

Database: "DB_notify_events" : 0 : 1 : 0001001F : 0

; @CESYSGEN IF DATASYNC_MODULES_REPLLOG

Record :

Field : 0001001f : "repllog.exe"

Field : 0002001f : "AppRunAtRs232Detect"

Field : 00030013 : 9

End

; @CESYSGEN ENDIF

End Database

    第一個字段包含要啟動程式檔案的名稱"repllog.exe"

    第二個字段包含傳遞給程式的初始化參數"AppRunAtRs232Detect"

    第三個字段包含觸發事件

我的解釋:

1. 上面的資料庫是靜态指定的,運作時候可以使用CeRunAppAtEvent這個系統api動态更改資料庫記錄.

2. 在驅動和pnp裝置代碼中,當裝置連接配接上時候,會使用一個CeEventHasOccurred廣播一個通知,比如序列槽和usb從serial類型裝置驅動中,會呼叫CeEventHasOccurred (NOTIFICATION_EVENT_RS232_DETECTED, NULL);意思就是發出一個通知NOTIFICATION_EVENT_RS232_DETECTED.在public/common/sdk/inc/notify.h中,找到定義     #define NOTIFICATION_EVENT_RS232_DETECTED           9

3. 系統(service,device或者shell--具體還不知道是那個程序)在收到事件後,會自動運作一個程式,運作方式和我們在指令行裡面敲repllog AppRunAtRs232Detect的效果是一樣的.