星期日, 3月 20, 2005

如何在Platform Builder新增自行開發的程式


如何在Platform Builder新增自行開發的程式

1.要加入自行開發的程式,您可以使用CEC Editor來編輯一個新的項目
來加入到Catalog。

2.通常修改內定的一些設定都是經由修改registry來完成的,修改桌面的部份,
您可以將下列registry加在您的 project.reg 應該就行了

[HKEY_CURRENT_USER\ControlPanel\Desktop]
"Wallpaper"="桌面圖檔路徑"

在CE中的USB HOST


在CE中的USB HOST STACK如下:

USB CLIENT DRIVER:HID, MASS STORAGE, PRINTER, REMOTE NDIS
USB DRIVER: Microsoft provided hardware independent driver
USB HOST DRIVER:OHCI, UHCI ...


當你從CATALOG增加支援某種USB DEVICE,如MASS STORAGE,PB的DEPENDENCE CHECK會要求你選擇一個USB HOST DRIVER。

至於USB FUNCTION DRIVER,在4.2之前只支援SERIAL INTERFACE, 通常是提供ACTIVE SYNC傳輸用。5.0後多了MASS STORAGE INTERFACE, 也就是說如果你的PLATFORM有支援此種DRIVER的話, 當你的CE DEVICE跟PC透過USB連線時,PC會看到一個MASS STORAGE DSIK。



在wince下如何定制桌面風格


去改SHELL下的*。REG文件

桌面上的圖示 My Computer和 Recycle Bin是在shell下的shell.reg中,桌面上的IE圖示在IE下的ie.dat文件中,其他的大部分是在shell下的shell.dat 中,Media play圖示在directx中;

開始功能表和任務條的修改:


修改 \WINCE420\PUBLIC\SHELL\OAK\HPC\EXPLORER\TASKBAR 下的stmenu.cpp taskbar.cpp文件

1. stmenu.cpp static STMENUDATA const stmenuData[] = {// {IDM_START_PROGRAMS, IDS_MENUPROGRAMS, IDI_STPROGS, CSIDL_PROGRAMS, 0, 0, 0},// {IDM_START_FAVORITES, IDS_MENUFAVORITES, IDI_STFAVORITES, CSIDL_FAVORITES, 0, 0, 0},// {IDM_START_DOCUMENTS, IDS_MENUDOCUMENTS, IDI_STDOCS, CSIDL_RECENT, 0, 0, 0},// {IDM_START_SETTINGS, IDS_MENUSETTING, IDI_STSETNGS, STATIC_ITEM, 0, 0, 0},// {IDM_START_HELP, IDS_MENUHELP, IDI_STHELP, STATIC_ITEM, 0, 0, 0},// {IDM_START_RUN, IDS_MENURUN, IDI_STRUN, STATIC_ITEM, 0, 0, 0}, {0, IDS_NULL, 0, STATIC_ITEM, 0, 0, 0},// {IDM_START_SUSPEND, IDS_MENUSUSPEND, IDI_STSUSPD, STATIC_ITEM, 0, 0, 0},}; 將static STMENUDATA const stmenuData[] 定義坐如上修改


2.taskbar.cpp 將BOOL CTaskBar::Register(HINSTANCE hInstance)函數內容注釋掉,直接return TRUE;


3. Click PB Menu Build -> Open Build ReleaseDirectory,Select \WINCE420\PUBLIC\SHELL\OAK\HPC\EXPLORER\TASKBAR 下的 stmenu.cpp, taskbar.cpp
目錄,執行:


set wincedebug=retail
build /c


4.重新編譯平臺即可。



WINCE如何保存設置?

在CE下,更改了IP位址,重啟後設置的值丟失。
Use Hived-base Registry

除了加入 hive-base registry support 之外最重要的就是在 boot phase 時要能把你的 External Storage 給 mount 上來並且只定對的 registry path

相關 document 可參考help index 中查 hive-based registries, setup
boot phase 的 registry 會放在 boot.hv 中這是 boot time 時用的default registry至於要如何把東西放到 boot.hv 中寫法大概像是; HIVE BOOT SECTION; END HIVE BOOT SECTION

hive base registry 就是registry 會以file 型態 storage 在 某個地方

1. 確認你指定的檔案是否有存在,default at: \Hard disk\Documents and Settings\System.hv2. OS會自動存入當你選擇"Start" -- "Stand by"的選項。若你關機時沒做這個動作,就會lose有修改的registry設定。你可以確認檔案日期是否會更新

其是要做 save 動做除了上述的 suspend 外也可以在你的 registry 加上 PersiXXX 忘了 的 key 可以讓你在 RegCloseKey 時也會 flush

請 教如何才能WINCE啟動時,直接運行IE流覽器。我在common.reg,在[HKEY_LOCAL_MACHINE\init]段添加如下類似內 容: "Launch80"="iesample.exe" "Depend80"=hex:14,00 但是,不起作用。

I've built a setup-box project boot with ie browser on wince 4.1.I'm sorry to make a mistake about the launch id of the explorer shell, it's 50(0x32) not 60(0x3c).Try this,

"Launch100"="iesample.exe" "Depend100"=hex:32,00

不 知各位先進有無試過在WinCE.NET中, 設定PCI介面的Multi-Serial Card,我參照Windows CE.NET 4.2 Documents內的PCI Serial Driver Loading, 設定我的OxFord OX16PCI954, 但並不能運作, 在HKEY_LOCAL_MACHINE\Drivers\Active中, 找不到Name, 所以看起來應該是沒有驅動, 我在Platform.reg中的設定如下:; ------------------------------ BEGIN PCI DEVICES ---------------------------------[HKEY_LOCAL_MACHINE\Drivers\PCI\Template\Serial] "Dll"="Com16550.Dll" "Class"=dword:07 "SubClass"=dword:00 "ProgIF"=dword:02 "VendorID"=multi_sz:"1415" "DeviceID"=multi_sz:"9501" "Prefix"="COM"

[HKEY_LOCAL_MACHINE\Drivers\PCI\Template\Serial\Unimodem] "Tsp"="Unimodem.dll" "DeviceType"=dword:0 "FriendlyName"="Serial Cable on PCI" "DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00
[HKEY_LOCAL_MACHINE\Drivers\PCI\Instance\Serial1\Unimodem] "FriendlyName"="Serial Cable on COM3:"; ------------------------------ END PCI DEVICES -----------------------------------
[HKEY_LOCAL_MACHINE\Drivers\PCI\Instance\Serial1] "InstanceIndex"=dword:1 "Dll"="Com16550.Dll" "Prefix"="COM" "Priority"=dword:0 "Class"=dword:7 "SubClass"=dword:0 "ProgIF"=dword:2 "VendorID"=dword:1415 "DeviceID"=dword:9501 "RevisionID"=dword:00 "SubVendorID"=dword:1415 "SubSystemID"=dword:0 "InterfaceType"=dword:5 "BusNumber"=dword:0 "DeviceNumber"=dword:15 "FunctionNumber"=dword:0 "IoBase"=dword:D000 "IoLen"=dword:8 "Irq"=dword:7 "SysIntr"=dword:17
[HKEY_LOCAL_MACHINE\Drivers\PCI\Instance\Serial1\Unimodem] "Tsp"="Unimodem.dll" "DeviceType"=dword:0 "FriendlyName"="Serial Cable on COM3:" "DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00
但是在HKEY_LOCAL_MACHINE\Drivers\Active中就是找不到COM3這個Name,我也沒試過別家的卡, 因為我這台是All in one的機器, 不知各位先進認為哪裡有問題
附註一下:基本上這樣設定是沒有問題的, 因為我可以用下列方式,
IF BSP_SERIAL3[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial3] "SysIntr"=dword:17 "IoBase"=dword:D000 "IoLen"=dword:8 "DeviceArrayIndex"=dword:2 "Prefix"="COM" "Dll"="Com16550.Dll" "Order"=dword:0
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial3\Unimodem] "Tsp"="Unimodem.dll" "DeviceType"=dword:0 "FriendlyName"=LOC_FRIENDLYNAME_SERIAL3 "DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00ENDIF BSP_SERIAL3
...
設出另外4個Serial ports, COM3-COM6, 但因為是用同一個IRQ, 所以一次只能開啟一個Serial port, 但我現在要同時使用6個Serial ports, 所以必須要用PCI方式驅動, 不知各位有何建議, 不然我就要重新寫一個Multi Serial Port的驅動.

CE下我已經能實現128MB記憶體,但如法炮製256MB記憶體卻不能正常啟動,做法如下:

1. modify pc.h,set CEPC_EXTRA_RAM_SIZE = 0x0E4000002. modify _OEMAddressTable in oeminit.asm, set dd 80000000h, 0, 0F000000h;3. build -cf4. rebuild NK.bin
參數值都是根據說明改的,不知道是設置的問題,還是CE就是最大記憶體限制?
各位大蝦請幫忙!

這問題好像在 platbuilder newsgroup 問過已經有回答了就是mapping range要設成 010000000h

另外 pc.h 也要改CEPC_EXTRA_RAM_SIZE = 0x0E400000;

kshuang大大,我都已經改了:

1. modify pc.h,set CEPC_EXTRA_RAM_SIZE = 0x0E4000002. modify _OEMAddressTable in oeminit.asm, set dd 80000000h, 0, 010000000h;3. build -cf4. rebuild NK.bin
還是不行。新聞組我也查了,沒有查到相關討論啊。為什麼要設為010000000h有點不太明白。這些東東調試的時候也沒辦法查看,很煩人啊。
因 為 OEMAddressTable 是決定 Virtual Memory Mapping 的 table而 config.bib 只有static mapping 到 前 28mb後面的 228 = 0xE4 都是在 run-time 時 mapping 的所以這樣加起來就變成 256 也就是 0x1000_00000

另外你用的主機板 該不會是那種 FrameBuffer 跟 Main Memory 共用的?? 很多build in Display 的 MB 都是這樣這時後呢 你就不能全不拿來用要扣掉最後那邊拿去做 FrameBuffer 的