12.17.2007

放棄當前的code,回到前面的revision..

使用 subversion,將整個folder的內容換掉 (例如..改用另一個vendor的driver)。
發展了一段時間,又要換回以前的內容,繼續開發 (也就是說,放棄這個vendore的driver)。

要用 "revert to revision...."。

revert to revision...N 會把整個folder的內容"改"回 revision N,但是不會改變目前folder的revision number。

就好像是你手動的把folder中的每一個file都改回 revision N的內容了。

所以再check in 時,這些file (revision N)都會被checkin 到最新的 revision。


另一個 "回到以前版本"的方法是 "Update to revision ...N"。
但是這個會讓folder 的內容和revision 都回到 revision N,所以以這個狀態再check in 時,就會有error message,說fild out of date。

...我不知道我這樣作是不是對的..

12.14.2007

Cloudbook - 大眾的eeepc

繼eeepc 後,大眾也要推出一款7" 採用 Linux + google ap,price about $400 的 輕薄型NB "Cloud Book":
  • Via C7 ULV 1.2G
  • 30G HD
  • 1.2MP Cam
  • 7" Lcd screen with touch panel
  • 512MB RAM
  • Wireless
  • 4 in 1 Card Reader
  • 2 USB 2.0 port.
  • gOS (Linux + Google AP)
所以規格比eeePC好喔。而且採用的gOS平台也"比較" Open (我個人的認知啦)。
預計明年 1 月開始發售。

build : "Bad database entry"

Build時出現這個error
BUILD: [00:0000000004:ERRORI] Bad database entry: 複製 -bsp_cfg.h 44 0 1C83BA26E388E00.
把 platform 下的build.dat刪掉後就OK了。

這個error出現的原因是 platform builder 很好心的幫你紀錄每一個foler的檔案內容(不管他有沒有列在 sources 中)。
同時 nmake 有沒有處理檔名中的"空白",所以一旦folder中有檔案(不管有沒有用到)的檔名包含空白,他就會掛掉.....

像上面的error message,就是我有一個file 叫"複製 -bsp_cfg.h"。
而windows中複製一個file到自己的folder,就會自訂在前面加上"複製"和一個space....


所以解決的方法就是找到error 顯示的那個file,刪掉後,開啟release directory, command console。
將 build.* 刪除後,手動下 build -c 重新build一次。

12.13.2007

main trunk

所有的修改最好都要回到main trunk,這樣將來才能用 compare revision 來compare 兩個版本的差異。

所以branch 中的revision 沒辦法和 main trunk 中的revision 作compare。
( 還是我不會 ?)

因為 TortoiseSVN show log 一定是該folder 的repository log。
所以要 switch 到 main trunk ,然後才能show log,然後才能compare 2 revision。
( 還是我不會?)

12.12.2007

sysgen error : regini.ini

Sysgen 出現 regcomp error : regini.ini 並且列出某一行

查是 :
 "FriendlyName"=LOC_USBFN_SERIAL_NAME
把platform.reg 中的這一行刪掉,error 變成 這一行:
"Manufacturer"=LOC_USBFN_SERIAL_MANUFACTURER
所以..大概是 LOC_USBFN_SERIAL_NAME,和 LOC_USBFN_SERIAL_MANUFACTURER 這兩個constant沒有定義吧。

找了一下定義的地方..在 platform\XXXX\Files\ 下的folder : Intltrns 下,有很多subfolder: 040a, 040c... 每個folder都有對應的定義。

猜測是 international 字元支援,每個字元會定義不同的字串內容。

.. 所以把這個folder copy 回去後,error 就消失了。

"Clean" 的解決方法

如果很倒楣的勾選了"Clean before build" ,又按下"sysgen".....
NMAKE:  fatal error U1073: don't know how to make 'C:\WINCE500\public\common\oak\lib\ARMV4I\retail\???.lib'
這(好像)是因為platform builder中 並不是所有的component 都有source code,和 makefile。

但是 又沒有好好"保護" 這些不讓人build 出來的component,所以一旦 "clean" 後就build 不出來了.. Q_Q.

或是說.. 不知道這些component 要到哪裡去build (source 在哪?)。所以無法"重製"。


解決 (不知道這樣算不算是解決):

就是去另一個地方(另一台 有裝 wince 的機器),同樣的path 中,把缺的library copy 回來。
這樣 sysgen 就可以pass 了..

然後 image 也可以boot... run ..

12.11.2007

"Make Run-Time Image" button



修改release folder中的 platform.reg 後,只需要再按這個..

VSS不是這樣用的

上一篇的抱怨..

然後Robert
VSS 不是醬用的,要改之前,要到VSS去checkout,就會自動把readonly 消除。
Loyal 補強說
像你配合 MS 的開發工具,就會自動幫你checkout。
附記: Vincent在旁邊偷偷的笑著...ho ho ho..

12.10.2007

[抱怨] - VSS mark "read only"

用VSS checkout (或checkin後),該file (目錄)會被更動成read-only。

這個配合上 platform builder 的build command,就會出現 "Cannot write 的error"。
然後platformbulder的build有一堆狀況都會朱線這個error message..
有人可能會說...既然是obj file,就不應該加入到version control 中...

但是 CE 可是close source 呀,一堆BSP 的vendor 與都有樣學樣的close source。
所以...有些是以 obj 的方式提供的.
這些close source 的obj 就要放入 version control 了。

如果是剛 install 的BSP也就算了。develope 了一陣的 snapshot,要再加入 version control 中。
誰有時間去一一check obj folder中哪些是vendor supply, 哪些是just build....


然後,就這樣...
難怪會覺得作CE是浪費生命..加上VSS後,更是.....

12.05.2007

CWnd::SetTimer

Wnd 有內建 Timer,可以用SetTimer( ) 這個funcion 來產生定時的event。
Prototype:
UINT_PTR SetTimer(
UINT_PTR nIDEvent,
UINT nElapse,
void (CALLBACK* lpfnTimer
)(HWND,
UINT,
UINT_PTR,
DWORD
)
);
就是..第一個是產生的event,第二是間隔時間,第三是call back function。

event 和 callback function 可以是NULL,代表不是 (但不是同時NULL)。

ref msdn library

12.04.2007

Lcd Controller Timing parameters

Lcd panel 的Timing 最小單位是clock,datasheet中標示為 Clock cycle。
這是panel 的特性,每個panel 有他工作的極限。

像 XXX 的 480x272 type,他的 clock cycle 就標示:
  Typ : 9, Max 15, Unit MHz
所以我們就要適當調整(除頻) host controller 的lcd vclk 頻率,讓他落在這個範圍內。

這個 Clock 信號,配合 R.G.B Data line,每個clock 會write一個pixel 的data到Lcd。



Lcd 掃描是橫式的,以這個例子來看,就是一條 480 的線。 這是一條 horizontal 掃描線。

Lcd 需要另一個信號 HSYNC,用來標示Horizontal 掃描線的開始。
HSYNC信號必須要維持一段時間,讓Lcd controller能夠正確收到。在datasheet中,稱作 Horizontal Sync Pulse Width。
480x272 這個type,標示:
  Min 2, Typ 41 Unit CLK
基於每個 Lcd controller 內部控制器的能力,一旦收到 HSYNC 後,需要一段內部處理時間,才能開始收取horizontal line 的pixel 資料。
這一段時間叫做 Horizontal Back Porch。是以 lcd clock 為單位來計算的。
這也標示在lcd 的data sheet中。
像 480x272這個 type,就標示 Horizontal back porch:
 Min 2, Typ 2, Unit CLK
另外,由於Lcd Controller 實在太糟了,在處理完一條horizontal line的所有pixel後,ㄒ需要休息一段時間,才能再處理下一條。這段時間叫做 Horizontal front porch。
datasheet標示
 Min 2, Typ - Unit CLK
這樣,一條掃描線所需要的參數都定義出來了 (都是以 lcd clock 為單位):

|<--HSPW-->|<--HBP-->|<---HORIZONTAL_LINE_DATA--->|<--HFP-->|


掃描線做完後,接著要靠一條一條的掃描線形成一個畫面(frame)。所以這部份的參數內容,都是以一條掃描線的時間為單位的..

和水平掃描線一樣,每個畫面的開頭,都需要一個信號,告知Lcd "這一條線是frame的開頭",這個信號叫做 Vertical Synch : VSYNC。
在datasheet標示 VSYNC 的信號,必須要維持至少 2 條掃描線的時間: Vertical Pulse Width
 Min 2, Typ 10, Unit H
其中"H"代表一個掃描線所需要的時間。
完全和Horizontal line一樣,Lcd收到VSYNC後,需要一段準備的時間,叫做 vertical back porch。datasheet上寫
 Min 2, Typ 2, Unit H
接下來還是一樣,一個畫面的所有掃描線資料都收完後,Lcd需要休息一段時間,才能再處理下一個Vertical Synch 信號,這段時間叫 Vertical Front Porch。Datasheet上寫:
 Min 2, Typ 2, Unit H
所以Vertical 部份看起來Horizontal 一樣,只是他的reference clock 單位變成"Horizontal Line Time (Period)"

|<--VSPW-->|<--VBP-->|<---EVERY_LINES_IN_FRAME--->|<--VFP-->|


所以 決定 Lcd Clock 頻率後,在決定一條horizontal line 需要的clock 數後,就可以得到 horizontal line 的頻率:
Lcd Clock = 9MHz
HSPW(41)+HBP(2)+H_PIXEL_NUMBER(480)+HFP(2) = 525.
Horizontal Freq = 10MHz/525 = 17.14kHz
然後由vertical 參數算出一個畫面(frame)需要的horizontal line 後,就可以知道frame rate (frame freq:
Horizontal Freq = 17.14kHz
VSPW(10)+VBP(2)+V_LINE_NUMBER(272)+VFP(2) = 286
Frame Rate = 17.14kHz/286 = 59.9 Hz

12.03.2007

usb function driver

修改的部份:
  1. plug-in/out interrupt 由EINT2 改到EINT1
    1. 利用同一pin 腳同時作 interrupt 與 IN/OUT 偵測,所以read 時要re config成input mode。
    2. InitReg 時,要program 好 interrupt pin
    3. BSP中SD 的card detect 用到 EINT1,要改掉,以免影響。
  2. comment out GPH CLKOUT 的相關操作 -- 因為有dedicated crytal。
  3. USB_PHYCTRL - bit 2 應該是 0 (使用 crystal)
這樣之後,就會出現 尋找 usb driver 的prompt了。
修改 platform.reg 中 Serial_Class 的vendor, product id 後就OK了。

Vendor . Product Id changed ?

ActiveSynch 的Vendor Id, Product Id 改了 ?
[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers\Serial_Class]
"FriendlyName"=LOC_USBFN_SERIAL_NAME
; "idVendor"=dword:0547
"idVendor"=dword:045E
"Manufacturer"=LOC_USBFN_SERIAL_MANUFACTURER
; "idProduct"=dword:2720
"idProduct"=dword:00CE
"Product"=LOC_USBFN_SERIAL_PRODUCT
"Index"=dword:5
; "Index"=dword:7

到出現 "尋找usb driver"時,就是 vendorid, product id 錯了.. (和當初安裝driver 的id不同)。

改為 045E, 00CE (就是上面的code)後,就OK了。