12.30.2008

DirectDraw Sample in Platformbuilder

Platform Builder 中內含 DirectDraw 的 Sample code ,在

C:\WINCE500\PUBLIC\DIRECTX\SDK\SAMPLES\DDRAW

要 build 這些 sample,可以到 platform builder 的 command 下..

build
sysgen -p directx sample-name

sample name 就是Sample folder 下的 folder name : ddex1, ddex2,.. dounts...

build 好的 exe 會在 workspace 的 release folder 下。


如果要改成由 Embedded VC build,把source, header, rc, image copy 過來,還要把 directdraw 目錄下的 include 目錄內的header copy 過來。

還要在 project settings -- link 加入兩個 library: dxguid.lib ddraw.lib

這兩個 library 都會在 workspace 的 release folder 下
當然,workspace 要含有 directdraw 這個 component 才行。
˙

12.26.2008

記得當初倫敦交易所的事件嗎?

英國人的潛水艇也用Windows XP了,但是是修改過的。
所以到時候出問題的話,一定是他們自己改壞了的原因..


文中有提到,就像華爾街交易所一樣,美國海軍用的是 Linux。

啊,Microsoft Blog 有提到耶。 但是,千萬不要列入 case study 呀...




潛水艇可不是開玩笑的呀,關係到人命...

12.18.2008

空間三點,是順時針排列還是逆時針排列

Robert 說,他有平面上的三點,依序列出,他要知道這樣列出是順時針還是逆時針..
他有記得小時候學過什麼右手法則,cross 之類的,拇指會是方向。
要 Google 什麼呢?

  • google 多邊 法向 -- 不是 (其實空間法向就對了)。
  • google 多邊 內積 -- 不是,這是求面積的。

內積?那外積是什麼呢?
  • google 外積 !!!
就是這個了,外積是求空間中兩向量的法線向量...


但是三點怎麼變成兩個向量呢?
三點 A, B, C 可以變成 (B-A), (C-B) 兩個向量。

所以答案就是:算 (B-A), (C-B) 這兩個向量的外積,如果是正,代表 A, B, C三點是逆時針。

這是國中數學吧....其實最後也不確定這是不是對的 :P


PART-II

Robert 又說...不行呀,不只3點,是很多點呀,要怎麼辦?
google 什麼呢?
  • Google polygon clockwise
一次就找到答案:
http://debian.fmi.uni-sofia.bg/~sergei/cgsr/docs/clockwise.htm

? 就是依順序每三點計算是順時針還是逆時針,多的就贏 ?

續:

似乎是不行,Robert 遇到一個 算錯的 case :

{ 262952,2774455 }, // 0
{ 262955,2774449 }, // 1
{ 262957,2774437 }, // 2
{ 262964,2774419 }, // 3
{ 262970,2774410 }, // 4
{ 262977,2774403 }, // 5
{ 262986,2774399 }, // 6
{ 263006,2774395 }, // 7
{ 263019,2774393 }, // 8
{ 263046,2774385 }, // 9
{ 263065,2774382 }, // 10
{ 263078,2774382 }, // 11
{ 263109,2774387 }, // 12
{ 263126,2774385 }, // 13
{ 263132,2774385 }, // 14
{ 263140,2774382 }, // 15
{ 263148,2774379 }, // 16
{ 263168,2774369 }, // 17
{ 263177,2774367 }, // 18
{ 263185,2774369 }, // 19
{ 263189,2774372 }, // 20
{ 263193,2774378 }, // 21
{ 263198,2774377 }, // 22
{ 263201,2774376 }, // 23
{ 263205,2774369 }, // 24
{ 263209,2774366 }, // 25
{ 263215,2774364 }, // 26
{ 263223,2774363 }, // 27
{ 263234,2774358 }, // 28
{ 263248,2774352 }, // 29
{ 263259,2774342 }, // 30
{ 263273,2774326 }, // 31
{ 263286,2774307 }, // 32
{ 263296,2774285 }, // 33
{ 263302,2774270 }, // 34
{ 263306,2774255 }, // 35
{ 263311,2774242 }, // 36
{ 263319,2774229 }, // 37
{ 263326,2774221 }, // 38
{ 263337,2774211 }, // 39
{ 263344,2774206 }, // 40
{ 263348,2774199 }, // 41
{ 263351,2774190 }, // 42
{ 263351,2774179 }, // 43
{ 263350,2774170 }, // 44
{ 263357,2774124 }, // 45
{ 263357,2774099 }, // 46
{ 263357,2774084 }, // 47
{ 263359,2774077 }, // 48
{ 263353,2774079 }, // 49
{ 263352,2774086 }, // 50
{ 263352,2774099 }, // 51
{ 263352,2774124 }, // 52
{ 263345,2774170 }, // 53
{ 263346,2774179 }, // 54
{ 263346,2774189 }, // 55
{ 263344,2774197 }, // 56
{ 263341,2774204 }, // 57
{ 263335,2774210 }, // 58
{ 263321,2774220 }, // 59
{ 263314,2774228 }, // 60
{ 263307,2774238 }, // 61
{ 263304,2774247 }, // 62
{ 263299,2774266 }, // 63
{ 263296,2774278 }, // 64
{ 263291,2774290 }, // 65
{ 263284,2774303 }, // 66
{ 263278,2774312 }, // 67
{ 263271,2774321 }, // 68
{ 263256,2774337 }, // 69
{ 263241,2774349 }, // 70
{ 263227,2774357 }, // 71
{ 263217,2774362 }, // 72
{ 263208,2774362 }, // 73
{ 263199,2774362 }, // 74
{ 263195,2774359 }, // 75
{ 263181,2774343 }, // 76
{ 263169,2774329 }, // 77
{ 263158,2774316 }, // 78
{ 263151,2774306 }, // 79
{ 263143,2774290 }, // 80
{ 263132,2774267 }, // 81
{ 263125,2774258 }, // 82
{ 263121,2774255 }, // 83
{ 263114,2774252 }, // 84
{ 263104,2774250 }, // 85
{ 263092,2774249 }, // 86
{ 263075,2774252 }, // 87
{ 263069,2774251 }, // 88
{ 263059,2774247 }, // 89
{ 263025,2774233 }, // 90
{ 263022,2774230 }, // 91
{ 263022,2774225 }, // 92
{ 263023,2774219 }, // 93
{ 263031,2774202 }, // 94
{ 263048,2774179 }, // 95
{ 263068,2774151 }, // 96
{ 263071,2774146 }, // 97
{ 263078,2774128 }, // 98
{ 263084,2774107 }, // 99
{ 263085,2774099 }, // 100
{ 263090,2774080 }, // 101
{ 263085,2774079 }, // 102
{ 263084,2774086 }, // 103
{ 263081,2774099 }, // 104
{ 263079,2774106 }, // 105
{ 263075,2774122 }, // 106
{ 263067,2774142 }, // 107
{ 263057,2774160 }, // 108
{ 263040,2774181 }, // 109
{ 263029,2774197 }, // 110
{ 263020,2774213 }, // 111
{ 263016,2774225 }, // 112
{ 263015,2774231 }, // 113
{ 263017,2774235 }, // 114
{ 263020,2774238 }, // 115
{ 263033,2774241 }, // 116
{ 263044,2774246 }, // 117
{ 263055,2774251 }, // 118
{ 263066,2774257 }, // 119
{ 263084,2774254 }, // 120
{ 263098,2774253 }, // 121
{ 263107,2774254 }, // 122
{ 263119,2774260 }, // 123
{ 263127,2774268 }, // 124
{ 263132,2774280 }, // 125
{ 263139,2774300 }, // 126
{ 263144,2774309 }, // 127
{ 263163,2774329 }, // 128
{ 263168,2774337 }, // 129
{ 263168,2774345 }, // 130
{ 263168,2774352 }, // 131
{ 263164,2774359 }, // 132
{ 263157,2774365 }, // 133
{ 263143,2774374 }, // 134
{ 263134,2774379 }, // 135
{ 263122,2774382 }, // 136
{ 263115,2774382 }, // 137
{ 263108,2774381 }, // 138
{ 263090,2774376 }, // 139
{ 263079,2774375 }, // 140
{ 263063,2774377 }, // 141
{ 263047,2774381 }, // 142
{ 263022,2774381 }, // 143
{ 263004,2774386 }, // 144
{ 262985,2774391 }, // 145
{ 262976,2774396 }, // 146
{ 262967,2774403 }, // 147
{ 262960,2774412 }, // 148
{ 262955,2774423 }, // 149
{ 262951,2774429 }, // 150
{ 262940,2774441 }, // 151
{ 262938,2774447 }, // 152
{ 262936,2774452 }, // 153
{ 262935,2774455 }, // 154

12.16.2008

這句話:
一家公司所做的最糟糕的決定之一是,設立研發部門或創新團隊。
一旦一家公司讓某些員工專注於創新,別人就會停止創新的腳步。
from http://www.gseeker.com/50226711/eceiee_164573.php

但是一堆公司都有創意研發部吔... 這代表....

12.09.2008

Google - native client

Google 的新計畫 : Native Client。

package包含一個 gcc compilation tool,firefox, chrome plug-in。

demo 是一個用 那個 tool compile 後的 code,讓 有裝 plug-in 的 browser run..
所以..是 run native code喔..

如果不用考慮 security 問題的話...以後 browser 乾脆就作成 loader 好了..

pTOC and copyentry in bootloader

在 CE 的 bootloader 和 kernel 的 initial code,常常會看到 pTOC 這個變數。

尤其是 bootloader,在 main( )一開始的時候,就會從 pTOC 中取出 copy entry, copylength。
然後一一的由 memory 的一邊 copy 到另一邊。

之後,才開始 作 main( )中真正的 code。

pTOC 這個變數,是 romimage.exe 賦值的,並不是 linker。

所以 pTOC 加上 main( )一開開始的 copy memory 動作,大概就是是 C 的 init bss.. 等等,變數初始化的動作。
所以 romimage 就有點像是 relocator 囉?

11.05.2008

update

因為 修改了舊文章,所以要 update 一下。

希望不會 update 太久.

http://www.google.com/intl/zh-TW/remove.html#outdated

10.29.2008

Moto 的 PND

Motorola 真的出 PND 了。
TN20 (3.5"), TN30(4.3")

規格看來就是很普通的 PND呀。價格也沒有特別便宜。
也是橫著擺,不是直立的呀...

所以說...定規格需求一回事,真的選擇和推出產品,又是另一回事...

10.17.2008

follow this link : http://wiki.debian.org/VirtualBox

set the bridge network on lenny. (share with virtualbox) success.

10.15.2008

Linus 的 blog..

Linus 也有自己的 blog 耶 : Linus' blog

10 月開始 po,大概是說因為朋友有一個blog 放family 的story,他覺得有一個不錯,所以也在 blogger 開一個。

第二篇說他收到 Intel 的 SSD,超級好,random read/write 是他試過的 SSD 中最好的。

第三篇說他為了管制小孩使用 電腦的時間,所以寫了一個程式,限制小孩上網時間,他會自動紀錄上網時間,並且有一個UI顯示剩餘時間,當時間超過他的設定值,就會強制 log-off。
他把這個程式"tracker"放在 kernel git 中...

然後是寫他一個沒有選舉權的外國人,對美國選舉的感想...與芬蘭選舉制度的比較..

然後?是他的狗的照片?

最後一篇是講最近 2.6.27 版 的問題,...大概是希望晚一點release...

10.13.2008

程式設計師格言

這一篇 (大概已經很古老了吧..):程式設計師格言

節錄幾個 (其實都很有趣)

4
我對軟體設計的方式導出的結論,有兩種方式。
一是把軟體設計得單純到很明顯不會有缺陷,
不然就是把軟體設計得複雜到沒有明顯的缺陷。
- C.A.R.Hoare

10
首先要先懷疑別人,被懷疑的人或許會把問題解決掉。

48
多想個10秒鐘,你可以不說「嗯,這個做得到」。

58
除掉了三個錯就會冒出一個錯。
這稱為bug的無窮迴圈。

61
不懂電腦的操作者是發現bug的天才。而且無法重現。

64
啊,那是微軟的規格。

91
有人在程式碼註解裡寫日記。像「今天是雨天…」,「想回家…」之類的。甚至還有「修改日: 2003/10/10 不能同意你更多」這種註解出現。說到這個,好像也看過「吃大便」這樣的註解。

94
說來說去,要去研究根本不知道為什麼會動的東西為什麼不會動了,
找拿破崙來也沒搞頭。

ex 18
最強藉口
以前「那是硬體的極限」
現在「那是Windows的規格」

其實有一堆都是講 Spec 和 Project management 的。這一類的,有興趣的就請自己去看吧 :)

在 comment 中寫日記的 idea 很不錯,下次來試試 ..

10.11.2008

好笑新聞

這一篇很好笑:

英國新任商務大臣 Peter Mandelson 喝中國牛奶得腎結石

大意是說,這個官員為了中國奶粉問題,當眾喝了一杯中國牛奶,為此,大陸總理還聲稱為他的"義舉"表示感動。

然後...最近的新聞就是... 這個英國新任商務大臣 Peter Mandelson 於 10/6 因為腎結石住院。

Link 的文章有真的去查證一下。所以是真的,不是 KUSO (雖然聽起來就是 KUSO)。



從這個事件,可以知道兩件事:
  1. 中國以後應該不歡迎 有腎結石的知名人士當眾表演喝中國奶粉。
  2. 還是台灣的官員厲害: 訂標準是一回事,如果要他喝...他寧可下台。

10.02.2008

Python, the functions I want to use - string

先記一下要用到的function:
"Parrot" 就是 ['P','a','r','r','o','t'] 的意思。
所以,
"Parrot"[ 0] 是 'P'
"Parrot"[-1] 是 't'

string.find(string,sub) : sub 在 string 中的位置,如果沒有,return -1。


剩下就是 create folder,create file , write file 的function了...

如果作完了再加上 UI。 -- wxPython.

10.01.2008

os.walk in Python

os.walk 是很方便(有趣)的 function。
像 os.walk('c:\\') 會自動 walk all the folders in c:\

return 三個 value : path, 這個path 中的 folder, file,例如:

C:\MyProj 下面有 dir1, dir2 這兩個 folder 和 file3, file4 這兩個 file。
os.walk('c:\\myproj') 會 給出以下的 tunple:

c:\MyProj, [dir1,dir2], [file3,file4]
...

很方便吧。不用寫 recursive function 去一一的找..

Transmeta 要掛掉了..

這一篇文章有說,Linus 曾經待過的公司 : Transmeta 積極尋找買主。

當初還覺得他的VLIW, code morphing 很 cool 呢,
Linus 也在那裡做出 cramfs 和 midori (是這樣嗎?)。

最後,只有做出 兩個 KUSO cpu,然後,因為各家都開始開發低耗電cpu,雖然後期有一堆廠商付專利費用給他,但是...還是掛了。

所以說,有先見之明和技術力,也不保證會成功 ?

最近怎麼都是要掛掉的新聞?

9.30.2008

又有人預測說PND市場要掛了..

這一篇 : 2012 年,手機將取代所有PND裝置

iSuppli 的報告,根據這幾年PND裝置的銷售數字與成長曲線,去年,PND裝置佔GPS市場的50%。到 2010 年,PND會佔 35%,2011年,手機(36%)會首次超過PND(30%),2013年,PND將會只佔 25%。

PND 市場正由快速成長期進入到成熟階段,2007 的123.7%,2008 成長將只有 43%,2009 年,PND 市場成長將只剩 23.5%。

相反的,手機中包含GPS功能的比例,每年依然維持大幅的成長。

iSupply 並預測 2008, 2009 年,PND 的製造商將會有一番併購與倒閉,因為市場無法提供小型PND製造商生存的空間。

最後一點說明我就不知道是說,新車內建 GPS裝置的取向,將會轉向與 TomTom,Garmin 合作,還是說 不與他們合作 ?

IDE for Python : SPE

因為 Vincent 很難得的決定了要 follow google 的腳步,立定志向要用 Python,最為他身為 經理 之外的一項程式技能,剛好我又在 try python ide (ref : R40eUbuntu),所以在這裡紀錄一下:

需要 python 2.5 -- 一般 python for windows 會有 activesate 可以選擇,但是我還是裝 official site 的版本,目前是 2.5.2。裝完後,開啟command 輸入 python 看看可不可以正確 invoke python。還有版本是不是正確的 2.5.2 版,如果沒有,確認有把 python.exe 的 folder (Python25) 加到 path 中。


裝 wxPython,我是裝 2.8,如果剛剛的 Python 2.5 有沒有正確安裝,就會出現要你確認 Python25 所在目錄的提示,如果沒有,就 OK。


最後裝 SPE,我是裝 SPE-0.8.4.c-wx2.6.1.0-no_setup ,這個版本是不用 exe 檔安裝的,就 unzip 後,不要改 folder 名 (_spe) 就可以了。我是把 _spe copy 到 C:\ 下。


然後就到 _spe 下 double click "spe.py" 就可以 launch SPE 了

嗯,當初 SPE,Eric 二選一,但是 在 windows 下 Eric 裝起來太龐大了,要裝 Qt library,還要裝 MinGW,所以,還是選了比較簡單安裝的 SPE,而且功能好像差不多。

9.28.2008

update to XP SP3

受不了那個一直跳出來的update.最後還是安裝SP3 了....裝蠻久的,希望不會有副作用才好...

9.26.2008

大概是說,因為儀器的精確度不夠高,所以沒辦法驗出這麼小的量,甚至因為誤差的關係,沒有的也有機會被驗出少量的三聚氰安。還有其實包裝物,加工過程都可能會有少量的污染(在加上美國說一個成年人每天吃2.5ppm的東西15kg,吃一輩子也不會有危險?),所以訂出這個標準的。


儀器不準的部份:暫時把美國,澳洲的奶粉也拿來驗,和大陸的比較。

----最終還是要增加儀器精確度來解決問題。

容器與加工造成的污染:當然也一併要併入,難道是容器污染的三聚氰銨就不具毒性? 所以這一點不用考慮。

再怎麼看也都是一項糟糕的決定,不回到0的結果,就是導致那些真的是0的產品,也沒人相信了 (誰知道你是0還是2.4ppm?)。


誠實最重要,就老實說,因為儀器太差,驗不出來,所以2.5ppm以下的有可能是有,也有可能是沒有,我們無法確定,但是2.5ppm以上的,我們確定是有的。

所以無法訂出更低的標準來,這一點,等新儀器購入後再補正。

這樣的反彈比較小吧。

看記者發表會,講一堆原因,儀器問題則輕輕帶過......

9.25.2008

紀錄一下

衛生署新聞稿
衛生署經參考國際檢驗方法及香港近日立法規定之標準,
並由藥物食品檢驗局與食品工業研究所專家會商後,決定我國宜採2.5ppm為判定標準。

像這樣的事應該要列出參與決策者的姓名才對。

署長:林方郁
副署長:宋晏仁
食品研究所專家:?

另一篇新聞有人名:
..約莫7時,衛生署長林芳郁、副署長宋晏仁、藥物食品檢驗局局長陳樹功、食品衛生處長蕭東銘、發言人王哲超齊聚衛生署14樓署長室,討論三聚氰胺後續處理。...

Google 一下這兩人,就會覺得,會作這樣的決定,真的一點都不意外呀!

宋晏仁的google資料比較多,而且是負面的比較多 (好像google不到正面的),列出一個 link 好了:
http://www.peopo.org/portal.php?op=viewPost&articleId=23837

林芳郁就比較少了,除了前一陣子的"祈禱",和台大院長時一些新聞,就沒了。




當初看宋晏仁的新聞,就覺得其實是檢測儀器的問題,大概是一個刻度就是 2.5ppm,所以不得已,只好設定 2.5 ppm。

9.24.2008

據說,以往以為神經信號的傳遞是靠鈉鉀離子產生電壓來傳遞,結果新發現是,其實是靠著類似"駐波"的物理信號在神經中傳遞。

波在神經中傳遞,壓縮和伸展神經產生電位變化,同時得以傳遞信號。也說明為什麼神經會有移動的隆起區塊。

--- 這是我在 "SCIENCE ILLUSTRATED" 雜誌看到的

9.23.2008

again – from WLW

最好不要又是一堆亂碼。

9.18.2008

GPS for Golf



這個就是在 Amazon 開賣的 Golf GPS

我還覺得奇怪打Golf幹麼用GPS .. 裝在Golf 球上 ?

結果用法大概是 : 利用這個裝置,他會告訴你目前與果嶺的距離,

如果有 advance功能,有 download 課程功能的話,就可以download球場地形資料。

可以告訴你現在要朝哪打,用幾號桿。



不知道有沒有個人紀錄功能,告訴你上次在這裡你是怎麼打,結果怎樣...

要是請老虎伍茲帶這個打幾次,還可以提供information : 當初他在這個球場用幾號桿,朝哪打...

要是要像Wii一樣的話,還要加上風速資訊..風向,風速...這可以作一個小型氣象台.....還是..拔起一堆草...

9.16.2008

Sandisk microsd 2G


PcHome 買的,sandisk 2G microSD - with SD 轉卡。 NT 199.

不是 SDHC 喔,那買這個幹麼?

這是 Robert 認證合格 : RNX OS upgrade card

所以...一堆人都買了..

9.10.2008

MS NavReady

MS 為 PND 裝置推出的 "NavReady",是一個 CE 5.0 的 "補充包"。
裝上 NavReady 這個 補充包後,會在 platform builder 的 Catalog 中增加以下幾個 item,讓你更容易的做出 PND ..

  1. Bluetooth Profiles (Dial Up Networking, Hands Free Profile, Phone Book Access Profile, Advanced Audio Distribution Profile (A2DP), Audio/Video Remote Control Profile)
  2. Connection Manager
  3. MSN Direct
  4. Live Search for Devices (LS4D)
  5. Sideshow
bluetooth 應該算是一個"補完",希望從此就可以直接利用 CE 內部的 profile ,不需找 3rd party 或是找內含 profile 的 BT chip。

ref : MS blog.

關於 NavReady,支援 CE 最用力的 PND 廠:mio,已經推出 NavReady 的PND裝置囉。其他的PND ODM 廠也快跟上吧。

9.09.2008

London Stock Exchange servers go down

今天(昨天?)的新聞:倫敦證券交易所電腦掛點,創下倫敦交易所暫停交易最長紀錄。

新聞來源就 google "London Stock Exchange servers go down",會有一堆..

這時候....當然就想知道交易所是採用哪一個作業系統。

在這篇"Case Study"有清楚的說明..(MS自己的網站也有)
...The exchange used the Microsoft® .NET Framework in Windows Server® 2003 and the Microsoft SQL Server™ 2000 database to build the new Infolect® system and has achieved unprecedented levels of performance, availability, and business agility. Launched in September 2005,...
.是擁有純正血統的 MS 平台。決定採用這樣的系統的是:
We selected the Microsoft .NET Framework on the basis of several technical and commercial factors, including real-time performance, agility, integration, and developer productivity. *

Robin Paine
Chief Technical Officer
London Stock Exchang

2005年 9 月開始...嗯,至少也撐過 3年了。

這類的事情,slashdot的討論,看起來總是很有趣..

據說是因為美國政府宣佈支援兩家快掛的房貸公司,導致開盤後買單交易量大增。系統不勝負荷 (這一段是廣播說的..)


那,紐約用的是哪一個系統呢....
低調...低調...還沒撐過三年呀....


應該是樹大招風吧。
不曉得該"Case Study"會不會加入這次大當機的 information...

以後採用MS的單位,大概會懇請MS不要列入他們的Case Study ...

9.05.2008

ref link : 雄獅旅遊的爛經驗

以前還覺得雄獅旅遊不錯,但是看到這一篇 : 雄獅旅遊的爛經驗。原來,大了之後,服務就變差了呀。


很明顯的...這一篇只是想盡一點小小的力量,增加 雄獅旅遊的爛經驗的 search rank :P

more on Chrome - ARM version will be released.

一樣還是 Chrome的新聞,Chrome 將會 porint 到 ARM platform

據說 V8 很容易 porting 到其他 platform,而且目前 Android 內的browser 也是用 Webkit 作 render engine,所以整合起來很容易。

大概 3個多月後可以 release。

希望那個版本也會是 open source.

9.04.2008

IE8/9 , FF3.1 and Chrome

最近的 browser 大戰,FF3.1,Chrome 和 IE8:

IE 的負責人說了 (ref ZDNet) :

微軟IE負責人Dean Hachamovitch發表聲明說:「瀏覽器市場高度競爭,但民眾會選擇IE8,因為此瀏覽器讓使用者彈指間就取得想要的服務、尊重他們瀏覽方式的個人偏好,而且比其他任一種瀏覽器更能讓他們控制自己的線上個人資料。」
嗯,沒錯,IE8的確會有這些好處,.....只是慢一點而已,而且沒辦法讓你自由的增加功能。

Brin也指出,即使Chrome的影響只在於強化競爭,促成開發者在其他競爭者之間更快速地流動,Google也能得利。他說:「如果Chrome只是讓IE 9變得更快,我們也會將此視為成功。」
同樣來自 ZDNet.

嗯,沒錯,是讓 IE9 更快。

覺得有點可憐,辛辛苦苦的研發一項產品,將要推出時,卻發現...已經 phase out....

self-propelled cage for fish farming

這篇很有趣,MIT 把螺旋槳裝在漁網(?)上,讓他自己去"捕魚"。

乾脆在拖網船上加上GPS好了,然後漁船會依照既定路線,繞一圈回到漁港卸貨.....

Chrome vs FF3.1 on javascript

Google Chrome 在執行 javascript上真的很快 (即使是心理上的...),因為他使用了 javascript virtual machine V8,那..跟 firefox 3.1 將要使用的 TraceMonkey 比起來如何呢?

馬上就有人作了 benchmarking...

整體來說,TraceMonkey 比 V8 快 1.19 或 1.28 (OS相關)。

哇!不知道執行起來會是什麼感覺,比 Chrome 快,又支援 firefox plug-in。firefox 3.1 真是令人期待。

9.03.2008

無聊的 chrome 初次使用心得

安裝完了,安裝很久,先是 Initialize 就花了 40 min,然後"連線到網際網路"又一陣子,然後告訴我 Error : 他的 Google update 沒辦法出去,要我檢查 firewall。

沒錯,公司是有 firewall,但是IE和其他ap 都出得去呀!

所以再 install 一次... OK,過了,終於是 "下載軟體"。然後就裝完了!

沒看教學,用起來大概跟一般 browser 一樣,感覺是有快一點(心理因素)。

但是用他來開 gmail, reader ,有一次就hang 住,但是把那個 tab 關掉 就 OK了。

這一篇就是用 Chrome  po 的.

9.02.2008

超無關的一篇

其實我只是看到 Google Release 頁面有 "Link to this Post",所以才寫這個,看看會不會被列在上面...


有嗎?

8.31.2008

  1. AviDemux upgrade
  2. HD1000 firmware upgrade
  3. Ulead patch for HD1000

8.28.2008

IE 8 出來囉,而且看起來越來越像 firefox 了。

這樣發展下去,IE 會不會像是 IIS 一樣,一直追著 Apache..最後,還是只能投向 Apache 的懷抱。

為了興趣而寫code,和為了錢而寫,code 速度和品質 不一樣 (嗎 ?)。

Next generation MSN Direct

Garmin Nuvi 785t 這一款 PND 可以經由 next-generation dynamic content from MSN Direct. 包含天氣,交通狀況,比較當地的油價,電影時間,股價,新聞與當地事件資料。

MSN Direct 的訂閱價格是 $50/year。

電腦病毒上太空了

這一篇新聞(?)有說到 NASA 在一名太空人的Notebook 上發現了電腦病毒,這個病毒是一個 keylog 程式,log key stroke 然後嘗試送到某個 ip address。

但是他也說...這不是第一次在太空站的電腦上發現病毒了...

8.27.2008

果然,今天的新聞,內含 Sirf 的裝置不能賣美國了。

這下子一堆 PND 不能買美國,不曉得包不包含Sirf 旗下的 Centrality 產品。如果是的話,一堆低價 PND 也不能賣美國了。

8.26.2008

anon-proxy

ubuntu 裡有一個蠻方便的 package : anon-proxy ,實際是甚麼我不清楚,是 JAP ? TOR 還是只是單一的 proxy ?

但是 run 起來就像是一般匿名 proxy 一樣,只要從自己的 4001 port 出去,就會是另一個 ip (但是每一次不一樣?)


安裝後啟動方式就像是一般的 service 一樣:
$sudo /etc/init.d/anon-proxy start

然後在 browser 中指定 proxy = 127.0.0.1 port=4001

但是重開機後,anon-proxy 好像就沒辦法啟動。

很神奇的,open source 社群就是這麼奇怪,這麼少人用的軟體,還是有人會用,而且問了,還會有厲害的人回答

這是因為 star. stop script 沒有 create folder,所以要自己修改 script:
$ sudo vi /etc/init.d/anon-proxy

然後在 '''PIDFILE=/var/run/anon-proxy/mix.pid''' 這一行後面加上:
mkdir /var/run/anon-proxy
chown anon-proxy:nogroup /var/run/anon-proxy

然後重新啟動就可以了。
然後為了避免自己不小心弄錯,就加裝一個 browser 吧!
我是選 opera,因為不知道為什麼,midori 在 ubuntu 上 run 不起來。
然後設定 opera 使用 anon-proxy 就可以了。

這樣,用 firefox 的就是真正的自己,在 opera 上的就是別人囉!
-- 我應該不會人格分裂吧!

ip 會變嗎? 還是先用個幾天好了....順便 log 一下 ip,今天的是.....

8.25.2008

TraceMonkey - JavaScript JIT for FF 3.1

這裡 看到的,Mozilla 好厲害,寫一個 JavaScript 的JIT,讓 FF3.1 執行 javascript 的速度比 3.0 快 2 ~ 40 倍 (這裡有 benchmark)

真是超厲害的,而且不是整個 script 都拿來轉,他只會找出 loop ,重複執行很多次的部份,把他轉成 native code,大概是因為要是都轉的話,花在做 compile 的時間反而不划算吧。

類似這個以前有一家公司 transmeta (Linus 有這在這一家公司上過班),有作過類似的技術,叫 code morphing,因為他的 core 是 VLIW,在 run x86 的 code時,會動態的把一些常常 run 的 code重新 compile成 native 的 Long Intruction Word。以此達到高效能低耗電。 (可惜結果好像不太好...)。

就和文章中說得一樣,這個技術要是 release 出來後,應該會讓很多 browser base 的 rich client AP 蓬勃發展 (雖然現在已經很多)。

這一篇有詳細說明這個 JIT 的作法,可以稍微瞭解如何決定要不要compile code。




要是真能成功就好了,這樣一些 原本就很熟習 JavaScript 的網頁設計師,就不用去學新的平台了 (SilverLight, AIR..etc)。

問題:因為是 compile 成 native code,所以....應該很難做到跨平台吧,要run 在 embedded system 也不容易吧...

8.20.2008

Hexdump format

因為需要把廠商提供的 bin 參數,轉成 c array。所以...用 linux 的 hexdump 來作,用 man hexdump 來看,果然是一個多樣化的 工具,還可以指定 format。只是看不太懂 man 中有關 -e format_string 的說明。

這裡 看到範例
$ hexdump -e ' [iterations]/[byte_count] "[format string]" '
原來,是要用 小字串 符號 把 format 框起來 呀!

所以我要的格式是

$ hexdump -e '16/1 "0x%02X,"' -e '"\n"' SPI_DATA.bin -n 432
這樣輸出的內容,直接就可以放在 C Array 裡了。

8.13.2008

Sirf 大概要完蛋了,ITC 最後判定 Sirf 侵犯 Broadcom 六項專利。

ITC Says SiRF Infringes Six Broadcom Patents

8.11.2008

今天的新聞: ACM 的這篇:

ACM SIGOPS Operating Systems Review
Volume 42 , Issue 5 (July 2008) Research and developments in the Linux kernel

開放下載:

內文章節:

Minding the gap: R&D in the Linux kernel

Introducing technology into the Linux kernel: a case study

Extending futex for kernel to user notification

Plan 9 authentication in Linux

Towards achieving fairness in the Linux scheduler

I/O resource management through system call scheduling

PipesFS: fast Linux I/O in the unix tradition

CUBIC: a new TCP-friendly high-speed TCP variant

On the design of a new Linux readahead framework

Practical techniques for purging deleted data using liveness information

virtio: towards a de-facto standard for virtual I/O devices

Virtual servers and checkpoint/restart in mainstream Linux

8.06.2008

r40eubuntu 也開啟 google analysis 了...

7.27.2008

好久...沒有颱風假了..

今年的假真少,連颱風假也很少。

所以鳳凰來了:

--- 圖片 copy 自中央氣象局..

今天老早就宣佈明天不上班囉。


依照莫非定律.....明天一定會是一個無風無雨..天氣晴朗的好天氣。

MEMO:

PO 完後,看到這一篇,想到我真是太沒誠意。

下次(有機會的話),要到頂樓去拍幾張天空來貼.... 每次copy 中央氣象局的也太沒誠意...

7.26.2008

程式要好好寫呀,不然這樣臉就丟大了!

在 LinuxLoop看到這個新聞,然後在Yuren's Info Area 看到翻譯。

大概是說 foxconn 的主機板 Foxconn G33M,bios中有一段code,偵測到OS是linux 系統的話,就回報錯誤的資料,讓linux不能在這個板子上執行。

follow 文中reference 的ubuntu 論壇,超詳細,順便可以學一下linux 下 acpi code 的 dump, compile。

竟然可以這麼清楚的看到以下的code : (害我都想買一片 Foxconn G33M來試試 :) )

If (MCTH (_OS, "Linux"))

{
Store (0x3, OSVR)
}

open source 的人也很厲害,就在forume中教你怎麼改這段code,然後 rebuild回去,修正這個問題。


好笑(糟糕)是foxconn 的客服。... (略)




我想,這應該不是Foxconn惡意的排除Linux系統,應該是 BIOS工程師改code時,只有考慮Windows 部份,所以只有改 Windows 的部份,其他部份就留著沒動(也就是懶? 或是趕 schedule?)。


發文者最後說:
Your DSDT table looks like it was written by a first year computer science student, it is scary, I will not just shut up and go away until I feel like I've been done right, this can end up on Digg, Slashdot, filed with the FTC that you are passing bad ACPI data on to Linux specifically.

嗯,這個。

可以算是給我們 身為軟體工程師 (programmer, software engineer) 一個警惕:

就算是趕 schedule,程式也要好好寫,不然自己丟臉不說,公司也受累不少...

7.24.2008

最近都在寫些 543 ...:)

朱學恆的blog是每個阿宅每天必去的網站,我也照例在 Reader 有提示後,就直接到主站去看..

嗯,是講 假考部隊的,嗯,對,的確是,沒有考證過......

然後,我看完了.



重點是... 迴響...是 空的!

這下 真是嚇呆了,所以馬上 寫了一行,就像被攝影記者拍到時,搶著說"媽!我上電視了!"一樣。
寫了完全不相干的話,就是為了趕快po出來。

OK,確認!然後....

果然!我還是拿不到第一名呀!


我也終於瞭解為甚麼那個網站的前幾個迴響都是寫一些跟內文不相干的東西,還有,都很短。

特價時告訴我

因為博客來有"7-11"取貨付款,所以常常在那裡買書。

他的 "下次再買" 功能挺不錯的。
要是能出一個 firefox extension,在網路上看到 喜歡的書,可以直接加到 "下次再買" 清單 ,應該挺不錯的。

結果書單中的書多了,也麻煩了起來,因為要訂書的時候,又要花時間在長長的 List 裡面找...

所以

要是有 "特價時告訴我" 的功能就好了。

在 "下次再買" 清單中的書,如果有特價時,就 email 給我,這樣我幾乎100% 會買吧。

總比現在一天到晚寄一些我不會買的書的特價通知給我,來得有效些。

7.23.2008

Diff 的速度超慢,diff 的windows 出來後,又 block 後面的主window,從 diff 的windows 顯示 difference windows後,又block 剛剛的 diff result。

所以一堆 被 block (no reaction) 的 window 開著,擋著螢幕。

甚至在 diff result 的 window 開啟一個 source view,想說要並列著,從 diff result 中把 需要的 file check 出來--------

但是...diff result 的主 window 佔了整個螢幕,所以 source view 和 diff result 無法並列呀!

所以?要我用手抄下來?


真不知道是哪個XX發明這樣的 source control system。

竟然還有人想用,才是一項奇蹟...

7.22.2008

書籍推薦

這個是一定要推薦的:

男子漢養成術:

看過之後,我在aNobii 的心得寫下:

"認真"看過的人,都會給這本書4顆星的評價吧!

不要被他書名混淆了,內容跟書名跟本沒有關係!

是非常詳盡,實用的生活指南。
非常值得隨身攜帶,或是將內容深植腦海。

因為...你不知道....你什麼時候會需要:

採集指紋的技巧.....測試人是真死還是假死....跟外星人 溝通的步驟....獵捕大白鯊...躲避米格機的掃射...

甚至...在返回地球的航程中 修理太空梭。

試想...以上所列內容,有哪些是你知道作法的呢?

------------------------------ ---------------

不要說你不需要! 等你需要時,後悔已經太遲了!

真是所有男子漢必讀的一本書。


.... 你不會真的去買吧.......
要看的話,跟Vincent借就可以了..

7.21.2008

今天NB的自動更新跳出來了,看了一下,竟然是SP3耶!

真糟糕,該不該裝呢?

經歷過 SP2 的人應該都會猶豫一下吧....


還是等等好了,一個月後再來看看,沒問題再裝好了。

7.07.2008

上次 說的 " Garmin 也用Linux",linuxdevice有作深入報導。

garmine 用 gnome 作為 ui toolkit,還加上了gnome-vfs,pnd裝置應該不會有太多樣的 storage device,也沒有網路介面,大概只有SD card和內建的 nandflash,所以特地使用 gnome-vfs的意思不知道是為什麼。

和 openmoko, OLPC,Nokia N810 一樣使用matchbox作為 windows manager。

使用 xserver-kdriver,google了一下,這個好像就是以前的TinyX。

最特殊的是使用 GeoClue

200美元以下的PND列表

這是從 Navigadget copy 過來的表,在該站會有update,還有表中各產品的link:
tomtom one 130 - $150
tomtom one 3rd edition - $148
tomtom one 130s - $199

garmin streetpilot c550 - $188
garmin streetpilot c530 - $180
garmin streetpilot c340 - $156
garmin streetpilot c330 - $127
garmin nuvi 250 - $189
garmin nuvi 200W - $198
garmin nuvi 200 - $161

magellan roadmate 1412 - $189
magellan roadmate 1200 - $139
magellan maestro 3100 - $104
magellan maestro 3200 - $101
magellan maestro 3250 - $186
magellan maestro 3100 - $144
magellan maestro 4000 - $155
magellan maestro 4200 - $188
magellan maestro 4210 - $181

navigon 2100 - $118
navigon 5100 - $199

mio moov 310 - $196
mio moov 300 - $180
mio moov 200 - $141
所以PND市場已經是拼低價的時代?
100元以下的產品還要多久才會出現呢?

過一陣子後,PND就會像mp3 player一樣,除了第一第二外,都是白牌天下?


為什麼會這樣呢?

這個表要是加上"solution"(也就是使用的 gps chip 和 man controller,厲害的人,可以再加上代工廠商),應該會會很有趣吧。

7.05.2008

Light Media Scanner

http://lms.garage.maemo.org/

Light media scanner 是專為not so powerfull的裝置,像embedded system 所作的media scanner。

Recursively 搜尋所有的folder,在 child process中 parse file type。並且在 child process break時,不會影響到main proesss。

Parsers 是以share objects 的方式作成plugins,所以要加入新parsers 不需要重新compile scanner。

scanner 需要SQLite3,用來紀錄已經parse過的file,和結果。

Application 可以藉由query 這個 SQLite3儲存的table,得到scanner 的結果。

Enlightenment Foundation Libraries

http://www.enlightenment.org

為了開發 DR17,需要一組新的library 和Tools,所以從 Imlib2, EVAS 開始改起,最後,產生了一組基於EVAS的全新toolkitIt,隨著DR17的發佈,我們也給他一個全新的名稱:EFL.

EFL 不僅僅是一個 rendering engine,還包含所有GUI需要的東西。

EVAS 是一個optimized canvas library。

Ecore 是一個Event Management 的抽象介面。

EDB是一個compact database,提供簡單直覺的 configuration mamagemtnt。

EET 提供一個flexible的container,取代以往使用tarball形式發放的themes。
EET的網頁看來,似乎是一個類似XML parser的東西,可以將一堆資料(value,string, image) 放在一個file中,並且提供一組介面從這個file中取出資料)
Edje 提供一個革命性的library 和toolset,將application 的 interface 和code完全的切開。

EWL provides a complete widget library built on all the other components of the EFL.

EWL 利用EFL所有的compenent,提供一個完整的 widget library。


Enlighemtnt的EFL專屬頁面有更詳細的說明:
http://www.enlightenment.org/p.php?p=about/efl&l=en

偉大的是,在Enlightment 的Wiki中竟然還有: EFL Windows CE

CeGCC 作 build tool
竟然還有這種專案,build CE program in Linux,CeGCC的FAQ部份更精彩。



Python 也有支援 EFL,是Maemo 的專案:EFL Maemo.

7.02.2008

因為太經典了,所以要轉載(貼)一下。
原圖出處:http://www.pixnet.net/photo/simonown/94712050
點圖可以放大

Robert說得好: 完全說錯跟完全說對一樣,都是要有Know-How的呀。

7.01.2008

Wiki Comparison

原來Wiki 系統有很多,多到還出了一個專門作compare 的網站:

WikiMatrix

要決定採用哪一個Wiki 之前,可以到那個網站去看一下..

6.21.2008

收到 新銀行 的金融卡了 (為甚麼每個公司的合作銀行都不一樣呢?)

收到銀行密碼的第一步就是去改成自己的密碼,一是為了保險,再來是為了自己不會忘記。

打開密碼通知.... 裡面有 晶片卡密碼 和...... 磁條卡密碼!



天哪,現在要去哪裡找 吃磁條卡的 ATM?

那這個磁條密碼 不就不能改?

那這個 通知書 不就要留著?不然自己都忘了 磁條密碼 怎麼辦?

6.18.2008

Garmin use Linux too.

繼TomTom之後,向來都是使用自己的OS的Garmin,也改用 Linux 了。

ref : Garmin Nuvi 880 Spec

單價高達 $999 (所以說是 "The Most expensive")

其中有兩個功能比較有趣:
  • Automatic Speech Recognition (ASR) capability (screen control)
  • Last position: unit automatically marks your position when you remove it from the windshield mount, so you can navigate with nüvi on foot and find your way back to your vehicle
所以,支援語音命令控制menu 動作囉 ?這樣一邊開車就可以一邊用命令操作,不必動手囉?

Last position 這個功能會紀錄下你將PND拿下車架時的GPS位置,所以當你帶著走(逛街)遠後,可以靠他回到你停車的地方 (應該不支援代課停車)。

其他我不太了解的部份有

DEM : Digital Elevation Map,查Wiki的結果是地貌資訊,在 PND 的意思是3D 地圖嗎?3D地形,不是3D POI喔。


既然提到Linux...就到Garmin去看看...有沒有...

果然有 : Linux Source Code.

而且看來 這不是Garmin 第一個使用 Linux 的產品。

希望 TomTom 跟 Garmin的努力,能讓 Linux 成為 PND的標準OS platform
... 大概不可能吧....

6.11.2008

Firefox 3.0 正式發表

上一篇才抱怨過,今天早上 update 的icon 就亮起來,結果... firefox 3.0 正式發表了!
..

6.10.2008

現在用起來覺得麻煩的地方: Firefox 用 3.0 beta,所以一堆extension 還不能裝..

Firefox 不能裝 extension就不是 firefox 了呀!

ubuntu site 說,這是 firefox 社群要求的,因為 ubuntu 8.04 是 LTS版,firefox 說 他們不對 2.0 版提供 LTS,所以要求 ubuntu 使用 3.0

不過沒關係 (?) 過一陣子, ubuntu update 就會 update 到 firefox 3.0 正式版了 (?)

6.09.2008

冰旅館 -- 一群人每年都蓋一棟用冰和雪作成的旅館。

因為一到夏天就會融化,所以、他們每年都要蓋一棟,也因此,每年都可以重新設計。

終端機伺服器用戶端 - 全螢幕 hotkey.

紀錄一下,ubuntu 的RDP Client 全螢幕 hot-key 是 "Ctrl-Alt-Enter"

6.08.2008

ubuntu 8.04 中文輸入

ubuntu 8.04 真的挺方便的,scim已經預先裝好,之後,只要到"系統"--"管理"--"語言支援" 加入 中文,自動下載玩後,重開機,就把字型和輸入法都裝好了。

6.06.2008

public code with debug on/off

原來 build public folder 的code,也會受到 環境變數的影響。

覺得很奇怪,同樣的code,在兩台pc上build 出來的結果不同。
  • my machine : usb in 會有3次 reset, setup procedure。
  • official build machine : 只有一次。
猜測這個跟 usb driver 對每個 command pocket的反應時間有關。
因為 public code的 usb mass-storage code有修改,所以有重build過。

所以...
  • 開啟 debug output .. build public usb mass-storage code..
  • 關比 debug output .. build public usb mass-storage code..
以上兩個usbmsfn.dll 和 開啟 debug output 的platform code link,剛好就是上面的結果。

BWM : console mode network bandwidth monitor

debian 安裝就是 install bwm 就可以。
執行起來:
Bandwidth Monitor 1.1.0

Interface RX(KB/sec) TX(KB/sec) Total(KB/sec)

lo 0.000 0.000 0.000
eth0 16.000 403.500 419.500

Total 16.000 403.500 419.500

Hit CTRL-C to end this madness.

6.05.2008

Vista - Mass Storage

Vista 的 Mass Storage 跟XP 不一樣,先是plug in 的時候:

Vista log : plug-in
fRestartIST
[USBF] ISTMain
+USB Cable Plug in
[USBF] Suspend
[USBF] Resume
-USB/AC Cable Plug out
+ EventOut ISTMain
USB_MSG_BUS UFN_DETACH
UFN_DETACH_2
fRestartIST
[USBF] ISTMain
+USB Cable Plug in
[USBF] Suspend
[USBF] Resume
[USBF] Suspend
[USBF] Resume
USB Attached
UFN_MSG_BUS 2 UFN_ATTACH
UFN_MSG_BUS UFN_RESET
UFN_MSG_SETUP : 80
UFN_MSG_BUS UFN_RESET
UFN_MSG_SETUP : 0
UFN_MSG_SETUP : 80
UFN_MSG_SETUP : 80
UFN_MSG_SETUP : 80
UFN_MSG_SETUP : 80
UFN_MSG_SETUP : 80
UFN_MSG_SETUP : 80
UFN_MSG_SETUP : 80
UFN_MSG_SETUP : 80
UFN_MSG_SETUP : 80
UFN_MSG_SETUP : 80
UFN_MSG_SETUP : 80
UFN_MSG_SETUP : 80
UFN_MSG_SETUP : 0
UFN_MSG_SETUP : a1
[USBF] POST USB_IN 1
UFN_MSG_SETUP : 2
UFN_MSG_SETUP : 2 <-- Vista 會多送一個 SETUP 0x02
然後是 手動 remove ... 根本沒送 detach !!! 雖然Vista自己顯示 remove 了。

Work Memo : Multi-ICE on New Debug board

一定要紀錄一下.. 新版 (方形,會卡住)的 debug board接 multi-ice 的使用方法。

接上debug board後,先將 兩個 switch 切到 - JTAG 部份,run 一次 Multi-ICE Server,一定會 fail。
之後,兩個 switch 切回 Multi-ICE mode,再 config 一次,就OK了。

猜測是只要先切到 JTAG,再切回就可以...

work memo : Robert's BootRun

稍微紀錄一下...

Robert 的 boot code 要在 ICE 跑:
  1. startup.S 中,clear memory 的code不要作。
  2. main 一開始把nandflash copy 到 RAM 的code 不要作。
  3. 使用 debug,不定義 __RELEASE_VERSION__ ,並且有把 debug port 納入 link。

USB IN/OUT and state change

在每個call Notity 的地方print Notify 的msg type。
Notify Setup 0 時,印出 packet byte 0 的內容。
同樣的Notify call back 有很多處,記得在 print 時區分出來。

發現... 在 SETUP Packet, byte0 == 0x02 時,算是 enumerate 結束,
這個時候可以確認是 USB 通訊OK。

在 Notify Detach 時,是USB 通訊結束的時候。

5.23.2008

Gooogle的Wiki ?

Google的新玩具:Google Site。

看起來好像是 Wiki.
有Google帳號就可以開啟

http://sites.google.com/site/sites/

5.17.2008

Test blog in iGoogle

測試一下從iGoogle貼..

5.13.2008

開機要看debug port,但是就是沒lay debug port。
Flash Read/Write 都OK,但是沒source code的update 程式又不知道在complain 什麼?

5.12.2008

出現 logo string 後就沒下文了...
查了一下..之後就call OALKernelStart 把argument放到 register,然後就 call KernelStart..... 然後就沒source code 了...


只好跟上一版(edom) diff 一下,config.bib 部份,差異很大...猜是ROM size設的太小,所以改成跟 edom 的一樣 , copy to release folder, make image, download .. OK!
  • 測試 demo board 的K9F2G08U0M : OK, flash disk 自動顯示。
  • 使用 socket,K9F2G08U0A : both function OK。
  • K9F8G08U0M : 要先erase。both function OK, but... 一旦在 Flash Disk copy data 後,就不能boot 了? --- No, 是只能開機一次... 之後就出現 80501003 的 error code。

5.07.2008

bootpart related codes

bootpart 在 PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\BOOTPART 下
有完整的source code : bootpart.cpp, util.cpp

bootpart.h 定義了 disk partition 的相關constant : partition id, mbr entry structure,... etc.
在 PUBLIC\COMMON\OAK\INC

bootpart 的nandflash 操作要借助 fmd.h 的function。
fmd.h 在 PUBLIC\COMMON\OAK\DRIVERS\BLOCK\MSFLASHFMD\INC
發現在 PUBLIC\COMMON\OAK\DRIVERS\BLOCK\MSFLASHFMD 有很多source code,其中

folder : ECC 還提供 256 bytes 1 bit 的 Hamming Code ECC Compute/Correct .
folder : RAM (好像)提供一個RAM模擬 nandflash 動作。
folder : TEST 提供一個利用 FMD_XXX作測試的AP,作read/write/erase, getinfo 等測試。

5.06.2008

Share code between bootloader and OS - FMD driver

要使用binfs 的話,bootloader 要link bootpart.lib,bootpart.lib需要 FMD_XXXX function sets,這部份 implement 在 OS 的driver (or common) folder 中。

但是要注意的是 bootloader 沒有提供 OS 的library,所以有一些function 不能call (其實是一堆function 不能 call)。

所以在 implement FMD driver 時,要注意到這件事情。

Microsoft Certification for CE 6.0 - Preparation Kit download

好(?)消息:
Nicolas NESSON's weblog 說 MS 有一個CE6 的Certification。
並且提供一份 Trainning Course,幫助你通過這個 Certification。

這份Trainning course 是 Free 的,預計有 6 個chaptor。
但是現在只有 Chaptor 1, 3 Ready for download,其他的章節會陸續補上,Download 的Link 在 這裡

還說,接著會有5國語言的翻譯本出現.....

BINFS

剛好 MSDN 上有一篇how to - "How to Implement BinFS"

第一步:Bootloader Support for BinFS

bootloader 要能夠在media (例如:Nandflash)上 create partition(BINFS & extend)。
這要link bootpart library。

bootloader create 好 BINFS 和 extended partition,OS就可以在 extended partition 上create data partition。

bootpart library 還可以 create boot partition 來存放 boot parameters :MBR 放在那一個block,BinFS region。

Bootpart library 在 %_WINCEROOT%\public\Common\Oak\Drivers\EthDbg\Bootpart

加入以下的registry後,BOOTPART 就可以認得 Bootpart create的 BOOT 和 BINFS partition:
[HKEY_LOCAL_MACHINE\System\StorageManager\PartitionTable]
"20"="BOOT"
"21"="BINFS"



第二步 修改 Config.bib

增加一個 EXT 記憶體區域,Type是 NANDIMAGE

NANDIMAGE Type 是 "不會被allocate memory" 的區域。 (但是還是要宣告出一塊address range ?)。
NK   800B8000  00300000 RAMIMAGE
EXT 803B8000 01000000 NANDIMAGE
CHAIN 813B8000 00001000 RESERVED
NK (RAMIMAGE)這塊區域是在boot的時候,會被load到RAM里的,所以BINFS需要的driver 都要放到NK中:
  • 有一堆....NK.exe, Kernel.dll, Coredll.dll, Oalioctl.dll, Fsdmgr.dll, mspart.dll, romfsd.dll, binfs.dll filesys.dll,, flash driver,, device.dll... 一堆
然後修改 CONFIG 區域,有三點:
  • RAM_AUTOSIZE=OFF
  • ROM_AUTOSIZE=OFF
  • 設定 XIPCHAIN=chain region 的開始位址。

第三步 修改 Platform.reg

BinFS Registry Settings
[HKEY_LOCAL_MACHINE\System\StorageManager\BinFS]
"FriendlyName" = "Bin FileSystem"
"Dll" = "binfs.dll"
"Paging"=dword:1
[HKEY_LOCAL_MACHINE\System\StorageManger\Profile\MSFlash]
"DefaultFileSystem"="BINFS"
"PartitionDriver"="mspart.dll"
"MountHidden"=dword:1
"MountAsRom"=dword:1
"Folder"="NAND Flash"
"Name"="Flash Disk Block Device"


這樣就完了 ? 不知道要怎樣把build出來的image (*.nb0, *.bin) download 到nandflash 中,用 Kitl 嗎? 還是要 用 eboot bootpart ?

ref 這一篇後...
這樣做之後,Config.bib 中,RAM 區域的開始位址,就可以設為 EXT (NANDIMAGE)的起始位址,也就是說,使用 BINFS 後,OS 的 RAM 就多了 (NANDIMAGE)這塊區域可以運用了。
當所有 NANDIMAGE 區域的 dll 都不需要 load 的時候,OS 的 RAM 就可以使用 這整塊,全部的區域。


可不可以這樣說:使用BINFS 後,RAM 可以增加的size,最大是 NANDIMAGE 這麼大。..

XIP - for Nand

原來是我會錯意

CE 的XIP 果然和 Linux 的XIP 是同一個意思,就是 Execution In Place。
可以讓code直接在ROM的address space 執行,不用 load 到 RAM中執行。

Multi-XIP 就是將 XIP 區域切割成多塊,這樣就可以把AP, SHELL, OS分在不同的XIP 區域。
這些區域分別會燒在 ROM的不同區域中,所以就可以分開update AP, SHELL, OS,不會互相影響。不需要為了修改 SHELL,連OS都要、一起update。



而在NAND Flash 上,是不可能作XIP的,但是使用Multi-XIP 還是有好處,就是可以分開update AP, SHELL 和 OS。

但是這樣的 image,在執行時還是會整個都load 到RAM中 。不管該DLL, EXE 前是否要使用,所以很浪費RAM。

如果要讓OS在需要的時候,才把 DLL, EXE load 到RAM裡,就要讓 OS 能夠access image 的內容,這個方法就是 BINFS 。

將 image 包裝成 BINFS 的格式,讓OS 能夠讀取,OS在需要的時候,就會到BINFS filesystem 中取出DLL 或EXE。

所以對"節省RAM"這一點來說,要使用BINFS。 而不是Multi-XIP。
(那binfs 是不是需要利用 Multi-XIP 來完成?)

.... 這個,大概就是大家說的..在NAND 上使用 XIP 吧..

Notes - 壓縮資料庫

紀錄一下..

檔案 -- 資料庫 -- 屬性 -- i -- 壓縮 --然後就可以看 %.

Robert 說這是手動的,所以每天都要作一次...

Multi XIP and Binfs

有點問題:

msdn 上 Multi XIP 的說明 (How to),並沒有提到BINFS。
只需要將 NK 切割成幾塊 BIN。
然後加上 chain,並且在 OEMInit( )中將 fixup (也就是 boot parameter) 的內容update 到 chain variable 就可以了。

但是實際看 source code,OEMInit 中並沒有這樣作。反而是把 NK 切割成 corekernel ,其他都放到 NAND 中,然後啟動BINFS。

是不是使用BINFS,就不需要在OEMInit( )中update chain 資料?

這樣的 XIP是不是就只有load kernel,而在NAND 的部份(BINFS),則是以DLL, EXE的形式依照需要load到RAM中 ? (而不是和How to 中的作法,會將APP.BIN, SHELL.BIN 在需要的時候整塊load到memory)

5.02.2008

eboot startup address

原來,eboot 的執行位址是由 eboot.bib 決定的。
eboot.bib 中RAMIMAGE Type 的位置就是startup address。
MEMORY

; Name Start Size Type
; ------- -------- -------- ----
EBOOT 00002000 00021000 RAMIMAGE
像這格start address就會是0x00002000
這個 RAMIMAGE 是不是就是code 的位置呀 ?

svn - daily use command for a programmer

  • checkin : clean your code (just keeps the most original code, remove the generated data and codes.
  • checkout : start to go with SVN.
  • update : keep track with main trunk.
  • revert : abandon current changes or revert to history code.
    • show log
  • branch : when someone modify the main trunk, or you just want to keep quite.
  • switch : change the working codes between branch and main trunk
    • repo browser
  • merge : OK, contribute your code and keep track with the main trunk.
    • from - to
    • Eric's merge tool.
  • diff - for arbitrary rev
    • for checked out codes only - show log
  • add files : add some modules files.
    • add then commit
  • delete files : delet some unuses files.
    • sometimes may cause conflicts - file exist.
  • export : if you just want the code.
  • blame : who to blame.
  • conflict and resolved : something not synchronized.. need hand made.

An Example :

Simple Hello code , with ? python ? better with command line build tool (or VS2005 is more attractive to them ?)

5.01.2008

try safari

safari 已經到了實用階段。尤其他的字型顯示,是我看過所有browser里最漂亮的 (Robert還一度誤認為是 pdf reader...)。

但是..用了一陣子之後。還是不習慣呀。尤其是對firefox 的使用者而言。

先是.. 沒有同文堂,所以簡體沒辦法 轉成繁體。

然後..google toolbar 不支援,所以沒辦法直接翻譯。

然後..看到想紀錄下來,以後再看的網頁,也沒辦法用 taboo...

... 一堆,一堆... 都很不方便...


所以,最後還是用回firefox了。


我想,接下來的browser ,最好都能支援 firefox extension,否則,要達到像 firefox 這麼方便大概不可能吧..

4.30.2008

MultiXIP : msdn

修改 config.bib

在config.bib 的 "MEMORY" section 中定義出run-time image 的 multixip regions, 以下是範例:
;  NAME           START ADDR    SIZE       TYPE
; ----------------------------------------------------------------
NK 80220000 007DE000 RAMIMAGE
SHELL 809FE000 00100000 RAMIMAGE
APPS 80AFE000 00100000 RAMIMAGE
CHAIN 80BFE000 00002000 RESERVED ; XIP chain info
RAM 80C00000 01000000 RAM
pdwXIPLoc 00000000 80BFE000 FIXUPVAR ; XIP pTOC
上面將原來的一個NK image 分成 3 個 BIN:NK, SHELL, APPS。另外一個 CHAIN 和 pdwXIPLoc 是MultiXIP另外需要的。

NK, SHELL, APPS 這三個區域是連續的,區域的大小可以自己決定,但是要考慮要放到該區域內得AP (要能放得下)。 一般來說,把該區域內所有AP的size 加總之後,+32K 就可以。

CHAIN 這個bin 要放在 NK, SHELL, APPS 之後。實際上chain.bin 的位置和bootloader 的實做有關。

pdwXIPLoc 區域被宣告為 FIXUPVAR,而且包含整個NK, SHELL, APPS。並且在CHAIN 之前結束。

之後,要修改 config.bib 的 CONFIG section:

有幾個是額外要設的:
  • AUTOSIZE=ON : 調整RAM 的start address 在最後一個 XIP region 後。
  • ROM_AUTOSIZE=ON : 自動調整每一個 XIP 區塊的大小。
  • DLL_ADDR_AUTOSIZE= ON : 調整DLL 的size,能夠橫跨 XIP region。
  • XIPSCHAIN=80bfe000 : 告訴 Romimage CHAIN.bin 的start address。
這樣config.bib 就做完了。

接著改 Platform.bib:

.. 懶得寫,而且跟我們的用法不一樣,大略來說,就是把一些dll, exe 分到 APP 和 SHELL 中。

然後是設定 platform builder的 參數:

Platform -- Settings -- Environment -- New : 加上 IMGMULTIBIN ,value 設為 1。

Build:

check - Make Run-Time Image After Build 和 Copy Files to Release Directory After Build。
sysgen.

完成後,會產生
  • Xip.bin
  • Nk.bin
  • Shell.bin
  • Apps.bin
  • Chain.bin
  • Eboot.bin
其中Xip.bin 包含 所有 XIP regions.

xip.bin -- 就是要download 的 bin 檔

-- 然後就是用 platform build 透過 KITL -- eboot download 到 target 上去。



有關 XIP Chain

XIP Chain 是一塊XIP region,由 OAL 讀取,內部資料描述 有幾個 XIP region。和每個region 的 entry。還有 XIP region 的starting memory address。

XIP Chain 會由 bootloader (eboot) 寫入flash/rom,
xip chain 在memory 的位置是由 Config.bib 設定的。然後由 fixup variable 傳給OAL。

Fixup Variable 是 ROMIMAGE.EXE 的一個功能變數,可以讓你在 makeimg 的階段

4.29.2008

NFS in Windows CE

在 nicolasbesson's blog : Debugging technics for Windows CE(Part I)
有提到,為了避免每次修改code,都要重新download OS。
可以使用KITL,當KITL啟動時,會用NFS 將 _FLATRELEASEDIR mount 到 RAM filesystem 中。
所以你可以直接改動在硬碟中 _FLATRELEAESDIR 的file,在 target 中也會同步改變。

另外一篇,如果要確認在 硬碟上修改的檔有update 到 RAM filesystem中,可以到 platform build中,Target -- Release Directory Modules -- 按下 "Add",把新增的 module加入。這樣不用重新start OS,OS也會把 module載入。


whaa!! 就像以往在作Linux 系統開發時一樣耶!

4.23.2008

OLPC 快完蛋了?

TC_Chu's Point 看到的,到 "source"去看。

大概是說,OLPC 最近一次重組,一堆大頭都離職了。
接下來決定要使用 Windows XP 來取代現在的Linux + Sugar。
所以不需要資訊長跟一些軟體開發的職務。

新聞中還有提到,OLPC 將會用XP這件事,大概是真的了。

follow post 的link 可以看到... OLPC 由慈善事業漸漸轉為營利走向.... 出貨的一堆問題.... 還有  keyboard pattern 問題.... 真是問題不斷呀。



我的疑問是..要是Sugar run 起來都不夠快了,run Windows XP 不就更慢了?
還有,Windows XP 的cost down 版本,會夠便宜嗎?  在對cost斤斤計較的OLPC專案而言?

其實他們都知道有那塊市場,也知道可以客制化出一個產品,足夠低價,並且足夠一般使用 (搞不好還是大部分使用都滿足)。
但是這樣會影響到主流/高階市場:一旦大家發現...這樣的產品就夠了呀,誰還會花錢買貴的呢?
所以一直不敢投入市場。

終於,有一個人敢投入了...而且他夠快。

而這個產品最困難的地方在....    定價



download image via RNDIS

eboot 加入rndis 的支援後,會用rndis 作為 ethernet 介面,對沒有 nic 的 target 很有用。

eboot boot 起來後,跟以前一下,按下"space"進入 eboot menu。
可以看到第一,第二的option 顯示 ip address 和 subnet mask。

然後.."D"  Download Image now

host pc (和target 有usb 連線)會出現"rndis裝置xxxx,安裝driver的訊息"。

PC 要安裝 usb rndis driver,MS 說..在win2000 後 rndis driver 已經是內建的了。
.. 但是很奇怪,還是會找不到,要自己安裝。

所以到 MS 去download "generic rndis driver" , follow readme.html 修改一堆..
最重要的是 VID,PID。

VID, PID 可以到 pc 的硬體去看,修改好後,就可以安裝 rndis driver 了。

driver 裝完後,eboot 會顯示出 Device Name : 'xxxxx'

rndis driver 啟動後,會多出現一個網路裝置。要把ip 設為跟 target board 的 eboot menu 顯示的ip address 同一網段,這樣 pc 和 target board 才能連上。

設定 platform builder -- target -- connectivity option - kernel service map 選 ethernet。
在 setting 的部份,會出現剛剛eboot 出現的 device name "xxxxx" 選他。

platform build -- attach device 會開啟一個dialog,顯示 download percentage... eboot 的 message log 也會出現 download 的 message..


重點:
  1. 要正確安裝 ms 的 generic rndis driver ,要修改 template。把 vid, pid 寫進去。並且save inf 到有 *.sys的folder。
  2. rndis 產生的網路裝置要設ip,要和 target board 的ip (see eboot menu) 在同一網段。
  3. platform builder 的connectivity 要用 ethernet,裝置要選 target board的名子。

4.18.2008

Let SVN works like VSS

也就是說,由 update-modify-merge 改成 lock-modify-unlock.

可以在文件上加上 property svn:needlock 來做到。

用 windows client 來作就是..
  1. 在要這樣作的文件上按右鍵,選 property
  2. 選 "Add",然後在pull-down menu 選 "svn:needlock",下面 "value" 部份隨便input一個value。
  3. commit
OK,該文件的icon 變成灰色了,代表是read-only。要get-lock 後,才會變成writable。
還有,get-lock ,modify  然後 commit 後,又會恢復 read-only。

4.17.2008

nand flash - page content layout

原來Nandflash Page content layout 是沒有一定的。

一個page = main data area + spare area.

以 pagesize 4k 為例:

有 4k 的main data area 和 128 byte 的spare area。

4k 和 128 實際上是連續的,以 512 byte 需要 9 bytes ECC的裝置。
可以這樣安排:

|----512----|----512----|----512----|----512----|--ECC1--|--ECC2--|--ECC3--|--ECC4--|-ECCECC-|
或是

|----512----|--ECC1--|----512----|--ECC2--|----512----|--ECC3--|----512----|--ECC4--|-ECCECC-|

4.14.2008

JAP : anonymous browing

一個用來隱藏IP的tool : Jondos Anonymous Proxy

跟 TOR 一樣,是經過一堆 relay(?) 來隱藏 source 和 path。
但是 JAP 好像有作SSL,所以比 TOR 好(?)

是 OpenSource.

安裝方式是去download client。
----需要java (JRE)。

啟動後,如果要通過proxy,先到config 中去設置 network-proxy。
然後她就會開始找server。

JAP 有 free 和 payment 兩種服務,選 free (no-cost)的server。連線成功後,UI 會有顯示。

之後設定browser經由 JAP 的機器 -- 設定proxy:

如果沒有變更的話,port是4001。所以run JAP的機氣上就設 127.0.0.1, 4001。

在config中也可以設定供其他機器連線 (真的像proxy一樣)。這樣其他的機器就要設proxy在這一台run JAP的機器上。

JAP 也可以run在Linux上, 也可以run在console mode (意思就是說...) :
..$java -jar JAP.jar --console
但是設定部份最好先進UI mode設定好。選OK後就會save在~/.jap.conf 上,再啟動 JAP console mode。



實際測試的結果,到"What'sMyIP"去看,IP是真的改了,變成 德國 的IP。
公司鎖住的網站也可以上了..

... 就.. 讓她繼續run 在哪兒吧..

4.11.2008

Initial Bad Block Mark : MLC and SLC

Nandflash 在出廠時都會作critical測試,確認每一個block是否OK。
測試不通過的block 會被標上記號,這些block 就叫 Initial Bad Block.

這些 Initial Bad Block 的資訊很重要,不可以輕易刪除,因為這些block 是在 critical condition 測試才會出問提,所以在一邊狀況下,或許會是OK的。
所以 user 自己是無法再(正確的)找出這些 bad block 。

Initial Bad Block 的標示位置,在SLC, MLC 上不一樣(或許廠商不同也不一樣)。

由 datasheet 來看:
  • SLC : 每個block 的第一或第二個page的spare area 的第一個byte,如果不是0xFF,就是bad block。
  • MLC : 每個block 的最後一個page的spare area的第一個 byte,如果不是0xFF,就是bad block。
ref : http://218.22.45.5/misc/Books/K9LAG08U0M_0.7.pdf

原來我以前就寫過了: http://realchecko.blogspot.com/2008/03/initial-bad-block.html

4.07.2008

原來DFUWizardCE執行時的baudrate checking是假的,實際少上還是依照main menu 設定的baudrate動作。

而 各版本的baudrate都不一樣,所以要先看version 再到firmware 的folder去看readme.
Fail Sample 分析:

Sleep/Wakup 測試 配合 mp3 play - repeat 30 min 後 system hang.
system folder disappear.

使用 debug version ,boot log 出現 [VFL:ERR] VFL_Read (nVpn:16776960) nVpn Overflow!

使用eboot cosole "Mark Initial Bad Block" 竟然沒有 bad block!
用VFL Format,也沒有report 有 bad block 。

ME - 2

不是 Me, too.

Engaget 這一篇 "Win7 明年推出"。

看完,我就聯想到一件事,想要留言時. . . . 第一篇留言,恰巧就是我想寫的。

沒得寫啦,所以只好留在自己的blog..

Vista... 會不會是第二個 Windows ME 呀!

4.03.2008

結果:

用 preserve initial bad block 的 RunEboot erasembr後。
用 eboot 中的 Make Initial Bad Block Information
再 format VFL
再安裝 OS

之後,install program 就沒有 nandflash read/write fail message了。

......接下來,要試試 Make Initial Bad Block Information 和 format VFL 和 erasembr是不是必須的。

erasembr 後直接format VFL 好像不行,要作 Mark Initial Bad Block 後再作 format VFL 才行。

由log 看來,有些被判定為bad block (非initial bad block),erasembr後就消失了(被判定為正常)?

erasembr後,VFL format 的initial bad block 有14個。
erasembt後,mark initial bad block,再 VFL format 的initial bad block有16個。

4.02.2008

Decoding_SpareECC( )
--- Read_Spare( )
--- Nand_Read( )

// Chip Select
_CE_L(nBank);

// Read Command (Always read spare area before main area in a page
_CMD(CMD_READ); // 0x00
//_SET_ADDR(nPpn, BYTES_PER_MAIN_PAGE);
_ADDR(BYTES_PER_MAIN_PAGE&0xFF);
_ADDR((BYTES_PER_MAIN_PAGE>>)&0xFF);
_ADDR(nPpn&0xFF);
_ADDR((nPpn>>16)&0xFF);
_CMD(CMD_READ_CONFIRM); // 0x30


Erase Block 的command 只需要 3 個address cycle。 也就是block index 就可以。
  • 0x60
  • Address x 3
  • 0xD0
  • Wait a moment

3.28.2008

紀錄一下,首次成功(?)的LCD register 設定:
clkval:3
VIDCON0 F4
VIDCON1 8060
VIDTCON0 B0309
VIDTCON1 2C0128
VIDTCON2 879DF
WINCON0 14
VIDOSD0A 0
VIDOSD0B EF90F
這個設定用的參數是:
  lcd_horizon_value = 480;
lcd_line_value = 272;
lcd_vbpd = 12;
lcd_vfpd = 4;
lcd_vspw = 10;
lcd_hbpd = 45;
lcd_hfpd = 2;
lcd_hspw = 41;
g_lcd_frame_rate = 65;
數值完全是ref datasheet。

但是顯示出來,在顯示漸層的淡色區域,會有條狀線條。
同時,大塊貼色塊時,也有暈染現象。

Robert 修改一下參數,把 lcd_hpbd 改為 2 後,就正常了。
( 真是偉大的robert呀)



奇怪的是,datasheet明明寫 horizontal back porch : min 8, typ 45.
是建議用45。

而且,min 只能用8呀。

為甚麼用 2 才對呢?


所以 Robert 數十年的 lcd driver經驗 還是比念datasheet重要呀。

3.27.2008

The GPS party is about to End ?

雖然PND市場逐漸成長,Sirf 在前一陣子宣佈降低第一季的財測,並且將 解僱約50名員工。
主因是因為 客戶需求疲軟, 加上他們進入的Mobile TV市場 成長不如預期。
同時他們也宣佈將 停止Mobile TV 的部門。

這一篇,甚至以這個標題來報導: Why the GPS Party Is About to End.


有關這兩項:
  • 客戶需求降低。
  • Mobile TV 市場未成熟。
另外一篇有不同的看法:

broadcomm 就在mobile TV上接到大量訂單。在XX地區,mobile TV用戶也又大量成長。

而客戶需求降低...

會不會是因為其他 GPS chip vendor 的出現?



所以悲哀的結論是...目前的 PND市場,大部分客戶要的是"堪用的低價產品"?

3.26.2008

每個page 的spare area,第一個 byte 是 bad mark,第二個byte是clean mark,代表這一個page是不是clean (有沒有被寫入資料)。

Clean Mark = 0x00 ,代表這個page有被寫入資料。

Initial bad block

nand 出廠的時候,廠商就已經把bad的block mark好了。這些bad block是廠商在critical environment中測試出來的,在normal 的狀態下,可能是正常的block。

所以不可以擅自將這些mark erase 掉。

依照datasheet,mlc的 bad block mark 是在每個block的最後一個page (127)的spare area中。

spare area的第一個byte若不是0xFF,就是bad block了。

問題:MLC 會有bit error呀,會不會原來是0xFF的,因為bit error,然後變成0xFE ? 然後被誤認為是bad block ?

還是在check bad block時,也要先將spare area作ECC ?

nand flash read

LB Read Command:

  • CE assert
  • CMD 0x00
  • Address
    • Offset in one page
      • A[7:0]
      • A[12:8]
    • block + page address
      • A[20:13]
      • A[28:21]
      • A[32:29]
  • CMD 0x30
  • --- delay --
  • Wait RB ready
  • --- read data (many)
  • CE de-assert
說明:
  • 告訴nandflash,把 哪一個 page 導引到 output buffer
  • 告訴nandflash,將要從該page的哪一個byte 開始讀
等到 RB pin ready,就可以向nandflash 的data port讀取資料。
每讀一個byte,內部 address就會+1。

以 "讀取 第 1 個block的第 4 個page 的spare area" 為例:

先算出 "第1個block的第4個page" 是 整個算起來,block+page index是..

1 x 128 + 4 = 132

LB 的一個page,有 4k 的data, spare area在 data area的後面,所以 就是由第 4096 byte 開始讀。

這樣就決定了 command 中的offset in one page (4096) 和 block+page index (132)。

照著下給 nandflash 後,就可以向nand flash 的data port 讀資料了。

因為 LB 的 spare area 有 128 bytes。所以用for loop
  for(i=0;i<128;i++)
data[i]=readnanddata();
就可以把spare area都讀到data[ ]中了。

3.25.2008

Page Size = 4k (+128 spare)
Block = 128 Pages =
Device = 8192 Blocks = 1024k Pages

Total = (4k+128) x 128 x 8192

翻譯:

每個Block有128 個Pages。
每個Page有4K的Data,最後還加上128 bytes的spare area。

Initial Bad Block

出廠時,每個Block的最後一個Page (127) 的spare area 的第一個Byte (page的第4096 byte),如果不是0xFF,那這個block就是bad block。

"文章"所說的 "Colume Address"就是最後的Byte Address : 一個Page中的Byte Address (0-4097) [Addr 0 - 11].

所以:每個block的第127個page的第4096個byte如果不是0xFF,就是bad block.


LB 是由兩個 GA 組成的。
所以 LB 有兩個R/B (R/B1, R/B2)和 CE (CE1, CE2)。

3.24.2008

m-a : module assistant

m-a 是在debian上build module的command。
把 help 列出來看看..
要有root權限
#m-a prepare
下載,安裝 kernel header,並且設定好 symlink。
Getting source for kernel version: 2.6.22-3-686
Kernel headers available in /lib/modules/2.6.22-3-686/build
Creating symlink...
apt-get install build-essential
Reading package lists... Done
Building dependency tree
Reading state information... Done
build-essential is already the newest version.
build-essential set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 218 not upgraded.

Done!
安裝..
~$ sudo m-a -f auto-install virtualbox-ose-source

Updated infos about 1 packages
Getting source for kernel version: 2.6.22-3-686
Kernel headers available in /lib/modules/2.6.22-3-686/build
apt-get install build-essential
Reading package lists... Done
Building dependency tree
Reading state information... Done
build-essential is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 218 not upgraded.

Done!
download
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 218 not upgraded.
Need to get 0B/205kB of archives.
After this operation, 0B of additional disk space will be used.
(Reading database ... 147773 files and directories currently installed.)
Preparing to replace virtualbox-ose-source 1.5.6-dfsg-2 (using .../virtualbox-ose-source_1.5.6-dfsg-2_all.deb) ...
Unpacking replacement virtualbox-ose-source ...
Setting up virtualbox-ose-source (1.5.6-dfsg-2) ...

Updated infos about 1 packages
unpack
Extracting the package tarball, /usr/src/virtualbox-ose.tar.bz2, please wait...
"/usr/share/modass/overrides/virtualbox-ose-source" build KVERS=2.6.22-3-686 KSRC=/lib/modules/2.6.22-3-686/build KDREV=2.6.22-6 kdist_image
Done with /usr/src/virtualbox-ose-modules-2.6.22-3-686_1.5.6-dfsg-2+2.6.22-6_i386.deb .
dpkg -i /usr/src/virtualbox-ose-modules-2.6.22-3-686_1.5.6-dfsg-2+2.6.22-6_i386.deb
dpkg - warning: downgrading virtualbox-ose-modules-2.6.22-3-686 from 2.6.22+1.5.2-dfsg2-9 to 1.5.6-dfsg-2+2.6.22-6.
(Reading database ... 147773 files and directories currently installed.)
Preparing to replace virtualbox-ose-modules-2.6.22-3-686 2.6.22+1.5.2-dfsg2-9 (using .../virtualbox-ose-modules-2.6.22-3-686_1.5.6-dfsg-2+2.6.22-6_i386.deb) ...
Unpacking replacement virtualbox-ose-modules-2.6.22-3-686 ...
Setting up virtualbox-ose-modules-2.6.22-3-686 (1.5.6-dfsg-2+2.6.22-6) ...
原來 m-a 就是協助install module from source package 的tool。
所以package 中一些只有附source的module,都可以用m-a簡單的作buil and install 。
像 qemu 也是..

m-a 是 module-assistant,安裝
aptitude install module-assistant

有關 kqemu

kqemu 是close source,所以無法提供 compile 好的package直接安裝。
所以debian 採用source code + obj code的方式 。

需要download source code,重新build成 module。

所以用 module-assistant 來作 get - build - install 的動作
--- 實際上只有build module,還是要手動 modprobe 安裝

3.21.2008

Power Up Down Funciton and IOControl

承上。

PowerUp, PowerDown function 和 IOControl 的SetPowerState有一點不同。

Power State 有 D0, D1, D2, D3, D4。

D0 : Normal
D2 : Standby
D4 : Sleep

Sleep 後,一定是 D4沒錯,但是Wakeup時,有可能是 D4-->D0 或是D4-->D2。

所以要將 PowerUp( ) 中的code移到 IOControl 的SetPowerState時,在D0和D2都要注意。

3.20.2008

OEMInit( ) boot 的while loop 有check ACIN 和USBIN和enable charge --- 要改。

Browser Support Standard

browser要支援的:
  • HTML 4
  • XHTML
  • CSS 2
  • DOM Level 2
  • HTTP 1.1 with keep-alive and gzip support
  • JavaScript 1.6 (1.7?) with XMLHttpRequest (AJAX)
  • TLS 1.0/SSL 3.0
  • I-Frame
大概是這些..

3.19.2008

wavedev : to know playing sound or not

一般device driver 藉由 IOControl 的 IOCTL_POWER_CAPABILITIES 回報自己support 的 power state (D0 ~ D4)。
然後 OS 就會依照需要用IOControl 的 IOCTL_POWER_SET 控制 driver 的Power State。

像 WAVEDEV ,在 Capability 時report D0(Normal), D2(Standby), D4(PowerOff)。

所以 ,,, 系統啟動後,在沒有聲音播出時,會將WAVEDEV設在D2 (standby)state,只有在有聲音播出時,才會設為 D0 (Normal) state。

所以... tap screen 的 "doo-doo-"聲,就會反覆 D0--D2, D0--D2, 然後PowerOff時,就會進入D4。

也就是說.... D0 就是 "現在要撥聲音了"... D2 就是 "現在聲音撥完了"。



另外,driver不可以自己改變power state,一定要由OS設定,Driver若是想要改變powerstate,要用
DevicePowerNotify(_T("WAV1:"), (_CEDEVICE_POWER_STATE)D2, POWER_NAME);
通知OS,然後OS就會用IOControl 叫 Driver變更 PowerState。

像:Driver Open 時,就要Notify OS 改變Power State為D0。
Driver Close時,要Notify OS改變Power State為D2。

3.18.2008

  • Noise ON Sleep ON Audio Playing .
  • Cannot Cold boot while battery voltage is very low.
  • Serial Port Lost data .. in BT file transfer.
  • Testing Program - FM transmitter
  • Testing Program - verify BT version.

  • Send Audio driver, weird code piece in official BSP.

3.14.2008

115200 with 64 Bytes FIFO

Baudrate : 115200

Start(1) + Data(8) + Parity(0) + Stop(1) = Total (10)

115200/10 = 11520 Bytes/sec

11.52 Bytes/ms

S3C2443 UART FIFO size = 64 Bytes

64/11.52 = 6 (ms)

400MHz
1/400 uS per inst

10 Bytes /ms =&gt 0.1 ms = 100 us pre byte.

100/400 = 40000 inst.
結論:

OVF : 40000 個instruction,, 也來不及.....

400MHz 敗給 66MHz.

3.13.2008

System Loading .. GetIdleTime

DWORD GetIdleTime (void);
CE 提供一個function call : GetIdleTime( ),用來取得系統啟動到目前,idle tick的總數。
配合 GetTickTime( ) 可以來算system cpu loading。

MSDN 的說明有reference code:
dwStartTick = GetTickCount();
dwIdleSt = GetIdleTime();
// Insert a call to the Sleep(sleep_time) function to allow idle time
// to accrue. An example of an appropriate sleep time is 1000 ms.
dwStopTick = GetTickCount();
dwIdleEd = GetIdleTime();
PercentIdle = ((100*(dwIdleEd - dwIdleSt)) / (dwStopTick - dwStartTick));
.. 就是算出這段時間的system tick和idle tick,然後算百分比。

根據msdn的說明,GetIdleTime( )需要OAL 的配合,OAL必須要mantain 三個kernel變數,宣告在 oal_nkxp.h
extern volatile UINT32 curridlehigh;
extern volatile UINT32 curridlelow;
extern UINT32 idleconv;
實際BSP在 OEMIdle( )中 update curridlelow, curridlehigh 這兩個variable。

其實 curridlehigh, low 剛好是 return value 的high word 和low word。
return value 是DWORD。

而在OEMIdle( )中,就是算出idle的tick數,累計到 curridlehigh/low。

-- 困難在計算 idle 的tick數 ==> 算出可以idle的tick數,設定timer,然後讓cpu進入idle......等timer timeup...

3.12.2008

FreeBSD mirror site : Taiwan, with http:

FreeBSD 7.0 的kernel 針對 multi-processor 作大幅度修改,移除 kernel code中的giant-lock,所以在多cpu 的benchmark上,有很大的進步。-- 效能幾乎是與cpu數量等比例的增加。

從 presentation 中的一頁(p 18):
  • 2007/Feb FreeBSD Release 7.0,當時的Linux 2.6.20.1 在多cpu的效能上還是不太好。
  • FreeBSD 7.0 的benchmarking 公佈。
    ==> Linux 受到"刺激",開始修改kernel code,改善效能。
  • Linux 2.6.22發佈,比FreeBSD 低 15%。
  • Linux 2.6.23採用CFS Scheduler。
所以說,Linux前一陣子突然改變scheduler是因為受到FreeBSD 7.0刺激的關係 ?

這樣,因為那benchmarking 實在太誇張,忍不住想拿FreeBSD 7.0試試看 (雖然我沒有 8 cpu machine)。

找了一下,iso download site都是ftp,沒有http的。

後來在 這裡(http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/
mirrors-ftp.html#HANDBOOK-MIRRORS-CHAPTER-SGML-MIRRORS-TW-FTP),找到所有Mirror Site的List,其中 Taiwan 的 這裡,有http download服務。

3.11.2008

A real $100 PC - ELONEX ONE

真正的百元電腦 (100歐元): Elonex ONE

規格大概是:
  • CPU : LNX Code8 300MHz
  • 512M DDR2
  • 7" 800x480 LCD
  • 1G Flash
  • 802.11b/g Wifi, 10/100Mbps ethernet
  • USB 2.0 x 2
  • 3 Cell Battery - 4 hours
  • Removable QWERTY Keyboard + 2 mouse (1 for Tablet use)
  • Speaker x 2 , headphone + Mic jack
  • 22cm x 15cm x 3 cm - 0.95kg
  • OS : Linos 2.6.21
圖的話就不(敢)貼了...看起來就像是eeePC一樣,但是鍵盤和螢幕可以分離,主機板是在螢幕上。
現在訂購,6月就可以拿到了。

內建的軟體也跟eeePC差不多.. Browser, Office, IM, Music Player, Photo Viewer
Problem : 快速在 touch panel 上移動一陣子後,系統就freeze,但是high priority thread 還依然動作中。
Solve 1 : 把 touch panel 的sampling frequence降低後,就不會 (容易?) 發生了。

結果,在接下來的測試中,High-loading情況下,快速click button icon也會造成當機 (freeze)。

在touch panel driver的 endless polling loop (wait ADC channel OK)中加入debug message。
由debug log發現果然hang在loop 中。

Robert說,ADC有很多driver在用 (battery, touch screen, light sensor),所以有對 ADC register作mutex。

查一下 ====> 這版 touch panel 中沒做!!

3.10.2008

bluetooth - linux command

紀錄一下 linux 使用bluetooth時的一些tool / command

  • hcitool
  • hciconfig
  • sdptool
  • l2ping
發現 這一篇 有很好的說明,使用的command和config都有列表。
virtual com port ,就是一個假的 seraial port driver,當有人open 這個comport時,他再去open其他的comport,把資料轉過來,不然就是丟一些假資料出去。
  1. 建立一個 comport skeleton driver。讓AP可以open, read/write。
  2. 被open時,去open另一個實體的comport (GPS ? TMC )
    1. 讀資料時,到實體comport去讀
    2. 寫資料時,寫入實體comport去
    3. -- 額外的功能:將讀的資料 log下來,存到 flash disk 中 (可能嗎 ?)
  3. 被open時,到flash disk去讀資料,"在適當時間"吐資料回去。

要作 1 :
  1. 為了維持相容性,要先把原來的(GPS, TMC channel 移開)。
--- 啊,有點麻煩,乾脆就直接修改 GPS的comport driver,作兩個特殊版本的GPS driver,一個作log,一個會吐log就可以了。

3.07.2008

bluetooth- protocol stack and service

翻譯這一篇 (http://developer.apple.com/documentation/DeviceDrivers/Conceptual/
Bluetooth/BT_Bluetooth_Basics/chapter_2_section_4.html
)
Bluetooth 的protocol stack:
  ---------------------------------
| Applications and Profile |
| ------------------
| | OBEX | A |
------- -------------- U |
| SDP | | RFCOMM | D |
--------------------------- I |
| L2CAP | O |
--------------------------- |
| HCI | |
--------------------------- |
| Link Manager | |
---------------------------------
| BaseBand/LinkControl |
---------------------------------
| RADIO |
---------------------------------
HCI 是 Host Controller Interface。

HCI 可以說是bluetooth 裝置與主機間的分界,bluetooth規範了詳細的HCI 介面,讓二間有一個統一的介面
也就是說,作bluetooth dongle的,只要做到HCI就可以了。
而寫 pc driver的,從HCI開始寫就可以。
HCI的下一層是 Link Manager

Link Manger 管理 Bluetooth 的底層,實際上只提供兩傳輸方式:
  • SCO : Synchronous, Connection Oriented : 給像voice 這種有即時性需求stream type 的資料用的,在RF中會reserve一定的頻寬給這一類通訊channel使用。
  • ACL : Asynchronous, Connectionless :給非即時性的資料傳輸用,像file, image, command 的傳送。
HCI的上一層是 L2CAP (Logical Link Control and Adaptation Protocol)

L2CAP 是上層通訊的管理者,負責將各種資料適當的以SCO,ACL方式經由HCI向Link Manager溝通,並且將收到的資料重新分給上層的共種ap和profile。
L2CAP利用"channel"的觀念,將一個連線區分成多個"channel",讓每個application使用一個(或多個) channel傳遞資料。

L2CAP之上的stack layer就沒有那麼清楚的階層區分了。就是所有profile。

Device/Host依照需要implement profile,但是有一個profile是每一個device/host都要做的:SDP
(Service Disconvering Protocol).

SDP 定義兩種角色:Service, Client。
  • 提供功能的叫Service
  • 要求使用的裝置叫Client。
Bluetooth可以同時是Service和Client。

(下表參考 Bluetooth - Application Developer's Guide - David Kammer)
..

根據 勇者昇 的說明,ftp 跟phonebook 實際上就用到 Object Push 這個service而已,
實際上,勇者昇 說,他當初是直接用OBEX溝通的,沒有什麼Object Push,,,因為MS就只有提供到OBEX而已。

3.05.2008

  • USB disable charge
  • Optimize Video display
  • SetClearReg - Factory Reset : Ask Nathan
有nUSB_IN,uUSB_ID,nUSB_ADP。
  • nUSB_IN : USB +5V 有電流
  • nUSB_ID : 利用USB_ID pin 來判斷是 USB 還是 Adaptor
  • nUSB_ADP : hardware use - not conneted to CPU.
uUSB_IN 和 USB+5V 狀態一致,所以和 nPWR_OK 的功能一樣。
所以 USB 的狀態只能由 nUSB_ID 來決定

但是未接入USB和接入USB的 nUSB_ID 狀態是一樣,所以要由 nUSB_IN (或 nPWR_OK) 來一同判斷。

只有 AC OK 而且 nUSB_ID 是High的時候,才代表 USB 是插入的。
似乎找到Hang on Booting - black screen with green led ON.

這是在SD card 插入,power button 按下的開機情況。
但是SD card中又沒有 正確的 file.
紀錄一下,Robert開始研究OS + Compiler (實際上已經開始2 weeks)。
目標是一個 "Support Source Level debugging" 的OS。
所以他想從TCC做起,做出一個可以run TCC的環境。
目前的進度是:
使用FreeDOS的 bootloader 和 "自己動手寫OS" 的範例,寫出一小段code,讓VM boot。
Mass Storage 有3G,copy 2G data 進入後,顯示只剩下10M,實際再copy 16M的資料進去會出現 "空間不足" 的訊息。

Robert 接入 PC 後,由PC執行 Format 動作後,再copy 2G data進入後,看來就OK了,顯示剩下 1G。

  • 原狀況是由SD copy 進入 Nandflash -- 也就是由 CE copy 進入
.... 查一下是TFAT還是FAT。

3.04.2008

TomTom Go 730, 930

TomTom 新發佈的 Go 730/930

大概摘錄一下:

有提供TomTom最新的routing計算法:IQ Route

TomTome利用已經蒐集了兩年的database,其中有各路段各時間的平均時速。採用這個平均時速作為各時段routing時的依據,而不是跟以往一樣,參考路段的速限。

TomTom說這樣的routing會是真正的"最快途徑",因為一個沒有紅綠燈的路段,會比一個高速限,但是有很多紅綠燈的路段,來得快。

TomTom說IQ route平均可以縮短50%的開車時間。

這個資料庫是由3百萬個匿名用戶經過超過一年的時間蒐集資料鎖建立的。

TomTom同時在北美推出HD Traffic 服務,HD traffic就是蒐集匿名用戶的行車資料。
TomTom將利用手機網路來搜及實際的行車資料。

除此之外的新功能還有內建3D 指示,DR和語音指令 (輸入地址,命令)。


看來PND還是軟體比較重要,現在已經進步到infra-struture的地步....
3D 實景指示,DR 好像變成標準。

3.03.2008

XP backup/restore with SystemRescueCD

Systemrescue CD 內建的 Partimage作 Windows XP 的 partition save/restore。

目前支援ntfs write了,要手動mount parition進來 (/dev/sda5是用來存放image的):
#ntfs-3g /dev/sda5 /mnt/windows
啟動 partimage :
#partimage
partimage是console模式,不用開啟X。
然後就 follow consol GUI.
要自己記得image path,輸入image path and name。然後一直按 'F5',OK。

Restore時也一樣,mount /dev/sda5後,記得image 的path, name。啟動Partimage...


systemrescue cd開啟進入linux,有些tool是需要X的,可以用'wizard' command開啟X

default 是用gzip壓縮。速度和大小還好。
  • SystemRescue CD 已經在今天正式Release 1.0 版囉
  • 利用Partimage也可以做到 "同時燒錄到DVD"囉。
* 以上只有在virtual machine上測試過...

原來SuperXXPRO附的GHOST8.3支援NTFS呀...

2.28.2008

CONTAINING_RECORD

PCHAR CONTAINING_RECORD(
PCHAR Address,
TYPE Type,
PCHAR Field
);
是一個MACRO,將 Structure 中某個field的offset 取出。
以上面的宣告來說,會 return : "Address" + "Filed" 在 strucure "Type" 中的offset。

這樣做的原因是為了避免 hard coding offset 在 source 中,造成 structure 內容變更不易。

這一篇 有說明 :


typedef struct _BUFFER {
LIST_ENTRY e;
UCHAR *buf;
} BUFFER, *PBUFFER;

...
PLIST_ENTRY entry = RemoveHeadList(&listHead);

PBUFFER a = CONTAINING_RECORD(entry, BUFFER, e);
為例, a 其實可以直接將 entry cast成 LIST_ENTRY就可以。

但是這樣以後 BUFFER 這個structure 若是修改的話,這樣寫就會有問題。

keyboard shortcut in Google Reader

原來 Google Reader 按下 "?" 就會出現 keyboard shortcut:

2.27.2008

MSN Direct

MSN Direct 是一個像TMC 的東西:RF receiver。

但是內容是數位的 (數位廣播?)。

廣播的內容可以有很多,像traffic condition, weather, ....

還有MS廣告中的,可以訂購的服務,做到 push personal information to smart device (黑莓機?).

目前已經有一堆 PND 內建這個功能了。

HalAllocateCommonBuffer

HalAllocateCommonBuffer

PVOID HalAllocateCommonBuffer(
PDMA_ADAPTER_OBJECT DmaAdapter,
ULONG Length,
PPHYSICAL_ADDRESS LogicalAddress,
BOOLEAN CacheEnabled
);

是要alloc一塊memory給 "不認識virtual address" 的hardware用 (?)

參數中指定需要的大小 (Length) 和 CacheEable。並且指定是要給哪一個hardware用 (DmaAdaptor)。
    pVirtDMABufferAddr =
(PBYTE)HalAllocateCommonBuffer(&Adapter,(AUDIO_DMA_PAGE_SIZE),&PhysDMABufferAddr, FALSE);
就會alloc一塊memory,memory的virtual address會return 回來,physical address 就放在 argument 的 "LogicalAddress" 中。

一般是給DMA用 (DMA只認識 physical address ?)

以 DMA 的 output channel 來看,allocate的memory,physical address要填入DMA的source pointer register。
DMA.SourceAddress = LogicalAddress。
然後,driver要藉由DMA送出資料,就要寫入 pVirtDMABufferAddr

4 Bit ECC algorithm

4 bit ECC 有兩種 algorithm :
  • Reed Solomon
  • BCH
S 公司的ECC好像是用後者。

MS Office file formate so complicated

Why are the Microsoft Office file formats so complicated? (And some workarounds)
錢一陣子MS公佈了Office的文件規格。

然後就有上面Joel 的這一篇文章。
滴滴麵 的blog中有中文說明喔。

其實資質駑頓的我在MS的環境中一直有這樣的疑問:為甚麼這裡要作得這麼複雜?XXX這樣作不就好了嗎?

看來,深奧的MS世界還真不是我可以瞭解的..

2.26.2008

todo

Loyal 已經確認busy thread 在 wave driver中,要查一下...

battery driver - notify and state change

battery driver竟然用兩個thread (不同步)

一個在 driver interface : init 時 create : Battery

BatteryThreadProc :
BatteryAPIGetSystemPowerStatusEx2(&tmpst);
IfPowerChange ( &tmpst, &pbc->st )
用來比較的另一個變數pbc->是
pbc = (PBATTERY_CONTEXT) pvParam;
pvParma 是ThreadProc的argument :
DWORD WINAPI   BatteryThreadProc(PVOID pvParam)
在createthread時:
ghtBattery = CreateThread(NULL, 0, BatteryThreadProc, &gBatteryContext, 0, NULL);
所以pbc 就是gBatteryContext。

這個variable好像在其他process中沒有人用,所以是給 BatteryThreadProc專用的。
所以 tempst 和pbc->st 的動作,是在 IfPowerChange( )中update的。

但是也不是每次call都update,分成
  • Only Voltage Change
  • Other Change
Only Voltage Change的話,不update battery new, old。

當IfPowerChange( ),就用 PowerPolicyNotify(PPN_POWERCHANGE, 0) 通知 Power Management driver。


ToDo : 如果voltage 還沒到 low voltage confirm, 要postmessage的電壓,但是 lifepercentage已經是 0 ,會不會 auto-off ?

結果: 不是kernel 關的,還是battery driver自己關的,在UpdateStatus( )這個Thread中有判斷batterypercentage 和 voltage,都達到 MIN value後,就會postmessage跟call keyboard event.

實際上送出 off message的只有一個地方 : updatestatus( )。

DAV_SVN : SVNAutoversioning

James說SVN在web folder為甚麼不能直接拖拉了?

Try了一下,真的不行,然後到 /var/log/apache2/error.log 看一下,message是:
No such file or directory : <DAV:cannot-modify-checked-in-parent>
Google一下,就有解答:
http://svn.haxx.se/users/archive-2007-03/0089.shtml
所以修改 /etc/apahce2/mod-available/dav_svn.conf加入 SVNAutoversioning on重新啟動apache2 後。

OK

2.25.2008

log - hang on splash screen

死掉的
....
OVL_LEFT 19
OVL_RIGHT 237
OVL_WIDTH 218
OVL_TOP 191
OVL_HEIGHT 30
OVL_BOTTOM 221
BAR_COLOR_BORDER=0x2945
BAR_COLOR_BASE=0x4A49
BAR_COLOR_ACTIVE=0x3F7E
OEMIoControl: Unsupported Code 0x10100fc - device 0x0101 func 63
Ps2Keybd::Initialize
Ps2Keybd::Initialize Done
IsrThreadStart:
++KeybdDriverInitializeAddresses
HARDWARE\DEVICEMAP\KEYBD\IOBase:b2100000
HARDWARE\DEVICEMAP\KEYBD\SSPBase:b1d00000
[KBD] v_pIOPregs mapped at 150000
Ps2KeybdIsrThread:
--KeybdDriverInitializeAddresses
IsrThreadProc:
Lyg.p: Layout Manager successfully initialized to 2
Maximum Allowed Error 7:
StreamContext::GainChange
-Codec_channel
Ufnpdd_ISTMain
SDE
HFSUSP
HFRM
USB Attached
HFRES

正常的...
OVL_RIGHT 237
OVL_WIDTH 218
OVL_TOP 191
OVL_HEIGHT 30
OVL_BOTTOM 221
BAR_COLOR_BORDER=0x2945
BAR_COLOR_BASE=0x4A49
BAR_COLOR_ACTIVE=0x3F7E
OEMIoControl: Unsupported Code 0x10100fc - device 0x0101 func 63
Ps2Keybd::Initialize
Ps2Keybd::Initialize Done
IsrThreadStart:
++KeybdDriverInitializeAddresses
HARDWARE\DEVICEMAP\KEYBD\IOBase:b2100000
HARDWARE\DEVICEMAP\KEYBD\SSPBase:b1d00000
[KBD] v_pIOPregs mapped at 150000
--KeybdDriverInitializeAddresses
Ps2KeybdIsrThread:
Lyg.p: Layout Manager successfully initialized to 2
IsrThreadProc:
Maximum Allowed Error 7:
StreamContext::GainChange
-Codec_channel
MSIM: IM_ReadRegistry read KB 5
-Codec_channel
+OEMSetAlarmTime(3/9/2008 2:0:0.000)

PWR_IST: pPWR->State = 0x2
PWR_IST back
Ufnpdd_ISTMain
HFSUSP
HFRM
USB Attached
StreamContext::GainChange
-Codec_channel
+OEMSetAlarmTime(3/9/2008 2:0:0.000)
-Codec_channel
+OEMSetAlarmTime(3/9/2008 2:0:0.000)
+OEMSetAlarmTime(3/9/2008 2:0:0.000)
+OEMSetAlarmTime(3/9/2008 2:0:0.000)
DeviceConext::SetGain 99999999
+OEMSetAlarmTime(3/9/2008 2:0:0.000)
+OEMSetAlarmTime(3/9/2008 2:0:0.000)
+OEMSetAlarmTime(3/9/2008 2:0:0.000)
狀態:SD card in, usb 接adptor.
第二次,使用boot message shell..
fail 的log
BAR_COLOR_BORDER=0x0
BAR_COLOR_BASE=0x3A07
BAR_COLOR_ACTIVE=0x7E0
OEMIoControl: Unsupported Code 0x10100fc - device 0x0101 func 63
BatteryVoltage 4153 4164
BatteryThreadProc PowerPolicyNotify(PPN_POWERCHANGE, 0)
Ps2Keybd::Initialize
Ps2Keybd::Initialize Done
IsrThreadStart:
++KeybdDriverInitializeAddresses
HARDWARE\DEVICEMAP\KEYBD\IOBase:b2100000
HARDWARE\DEVICEMAP\KEYBD\SSPBase:b1d00000
[KBD] v_pIOPregs mapped at 150000
--KeybdDriverInitializeAddresses
Lyg.p: Layout Manager successfully initialized to 2
Maximum Allowed Error 7:
Ps2KeybdIsrThread:
IsrThreadProc:
StreamContext::GainChange
-Codec_channel
Ufnpdd_ISTMain
HFSUSP
HFRM
成功的會是.
BAR_COLOR_BORDER=0x0
BAR_COLOR_BASE=0x3A07
BAR_COLOR_ACTIVE=0x7E0
OEMIoControl: Unsupported Code 0x10100fc - device 0x0101 func 63
Ps2Keybd::Initialize
Ps2Keybd::Initialize Done
IsrThreadStart:
++KeybdDriverInitializeAddresses
HARDWARE\DEVICEMAP\KEYBD\IOBase:b2100000
HARDWARE\DEVICEMAP\KEYBD\SSPBase:b1d00000
[KBD] v_pIOPregs mapped at 150000
--KeybdDriverInitializeAddresses
Lyg.p: Layout Manager successfully initialized to 2
Maximum Allowed Error 7:
Ps2KeybdIsrThread:
IsrThreadProc:
StreamContext::GainChange
-Codec_channel
MSIM: IM_ReadRegistry read KB 5
-Codec_channel
+OEMSetAlarmTime(3/9/2008 2:0:0.000)
>> PnaShell is launched up........!

PWR_IST: pPWR->State = 0x2
PWR_IST back
BatteryVoltage 4164 4153
BatteryThreadProc PowerPolicyNotify(PPN_POWERCHANGE, 0)
BatteryVoltage 4142 4164
BatteryThreadProc PowerPolicyNotify(PPN_POWERCHANGE, 0)
BatteryVoltage 4153 4142
BatteryThreadProc PowerPolicyNotify(PPN_POWERCHANGE, 0)
Ufnpdd_ISTMain
HFSUSP
HFRM
StreamContext::GainChange
-Codec_channel
+OEMSetAlarmTime(3/9/2008 2:0:0.000)
-Codec_channel
+OEMSetAlarmTime(3/9/2008 2:0:0.000)
BL_On(TRUE)
>>> ++HWSetBacklightDutyCycle percentage:: 55
>>> TIMER_CNT = 5050
>>> --HWSetBacklightDutyCycle
BL_On: Turning AC backlight ON
BL_MonitorThread Registry event
+OEMSetAlarmTime(3/9/2008 2:0:0.000)
DeviceConext::SetGain 99999999
+OEMSetAlarmTime(3/9/2008 2:0:0.000)
+OEMSetAlarmTime(3/9/2008 2:0:0.000)
BL_On(TRUE)
BL_MonitorThread Registry event
+OEMSetAlarmTime(3/9/2008 2:0:0.000)
+OEMSetAlarmTime(3/9/2008 2:0:0.000)
BatteryVoltage 4164 4153
BatteryThreadProc PowerPolicyNotify(PPN_POWERCHANGE, 0)
BatteryVoltage 4153 4164
BatteryThreadProc PowerPolicyNotify(PPN_POWERCHANGE, 0)
BatteryVoltage 4164 4153
BatteryThreadProc PowerPolicyNotify(PPN_POWERCHANGE, 0)
BatteryVoltage 4153 4164
BatteryThreadProc PowerPolicyNotify(PPN_POWERCHANGE, 0)
BatteryVoltage 4164 4153

2.22.2008

沒做完的事

  1. battery voltage要重新校正
  2. FM發射器新增功率設定
  3. 新LCD driver
  4. Pwr button 有點怪怪的

好奇怪,我的機器build出來的wake up 會出現usb-in message(nathan說得,因為messasge不完整)。
但是相同都是從VSS checkout的code,在building machine上卻不會....

  1. 要試試是從哪一個rev (from svn)上開始有這個問題的 (build時要確認 usbms 有define)
  2. 要試試disable debug message會不會發生
  3. 猜測是 sd in out message,print out number 看看 (correct and error bin)

有關 postmessage error 問題:

重新sysgen 後就OK了。

sysgen 的注意事項:
  • sysgen 不會重新build bsp (要用sysgen and build current BSP 才會)
  • public folder 內有修改的東西,sysgen 不會自動重build,要自己手動去build (e.g : usbmsfn)

wakeup後會跳出usb in message的原因是:
以前的usb-in/out message post實做在 public 的usbfn bot.cpp中,但是新的實做在 driver ufnpdd 中,但是在public fusbfn 的bot.cpp 的postmessage code沒有刪掉,所以造成這樣。

Killer AP for PND (?)

今天看到的新產品新聞 (link忘了)

原來

GPS 車機最好的附加功能 (Killer AP)是.... 酒精濃度偵測 裝置。


會不會變成標準配備 ?

James提醒:會有客訴吧...
為甚麼GPS說我酒精濃度可以開車,但是警察的酒測卻沒過?

2.21.2008

MAX9850 Register : 0x05 ENABLE

0x05 (Enable Register)內含各function的enable bit:
  • bit 7 : ~ SHDN : shutdown 整個codec
  • bit 6 : MCLKEN : DAC需要外部MCLK,但是 LineIn/Out 和Headphone部份則不需要
  • bit 5.4 : CPEN : Charge Pump Enable : 讓LineOut , Headphone的Charge Pump功能enable起來
  • bit 3 : HPEN : Enable Headphone output (有一句 "The Line Output must be enabled for the headphone amplifiers to operate properly",是說 enable headphone時,lineout也要enable才行嗎?)
  • bit 2 : LNOEN : Enable LineOut (回應上一個問題:Yes)
  • bit 1 : LNIEN : Enable LineIn
  • bit 0 : DAC : Enable DAC.
所以比較要注意的就是headphone和Lineout之間的關係,headphone依賴Lineout。
所以如果有人設計 Lineout 直接以固定AMP gain 推speaker,則插入headphone時,speaker無法關閉。

這也就表示 MAX9850不支援Lineout直接接speaker (所以lineout沒有獨立gain control ?)。

所以LNOEN 一值要是1就是了

程式設計上,雖然用read-modify-write比較好(減少相依)。但是由於read-write之間形成一個critical section,然後I2C I/O部份又是一個critical section。

CE的critical section又有點像 mutex,不是完全的disable context switch,所以這樣作有機會會造成dead-lock (還有內建priority-inversion?)

所以有點危險。只好每一個function用一個variable來代表狀態,每次write時依照variable重新算出數值。

需要的variable有
  • headphonein
  • lineinopen
其他的部份:LNOEN一直要是enable。 lineinopen的話,DAC就要disable。

2.20.2008

log IIC - max9850 - traditional code.


DoI2CIO: SET_READ_ADDR
DoI2CIO: SET_READ_ADDR
Drop: 0x21
DataCount: 0x0
ACK NOT received
RECEIVED DATA1:: 0x4
DoI2CIO: SET_READ_ADDR
DoI2CIO: SET_READ_ADDR
Drop: 0x21
DataCount: 0x0
ACK NOT received
RECEIVED DATA1:: 0x4
StreamContext::GainChange
DoI2CIO: SET_READ_ADDR
DoI2CIO: SET_READ_ADDR
Drop: 0x21
DataCount: 0x0
ACK NOT received
RECEIVED DATA1:: 0xC
DoI2CIO: SET_READ_ADDR
DoI2CIO: SET_READ_ADDR
Drop: 0x21
DataCount: 0x0
ACK NOT received
RECEIVED DATA1:: 0x4
DoI2CIO: SET_READ_ADDR
DoI2CIO: SET_READ_ADDR
Drop: 0x21
DataCount: 0x0
ACK NOT received
RECEIVED DATA1:: 0x4
DoI2CIO: SET_READ_ADDR
DoI2CIO: SET_READ_ADDR
Drop: 0x21
DataCount: 0x0
ACK NOT received
RECEIVED DATA1:: 0x4
DoI2CIO: SET_READ_ADDR
DoI2CIO: SET_READ_ADDR
Drop: 0x21
DataCount: 0x0
ACK NOT received
RECEIVED DATA1:: 0x4
DoI2CIO: SET_READ_ADDR
DoI2CIO: SET_READ_ADDR
Drop: 0x21
DataCount: 0x0
ACK NOT received
RECEIVED DATA1:: 0x4

Workrecord.

實在太亂了...紀錄一下 rev.
1012 : 加上 debug log。
回到986,用原來的driver,加上debug message,check IIC pin configuration。
986 有問題,shell 進入後 touch panel 失效,
改到 987 : 一樣。
==> 結果是release folder platform.bib comment掉wave driver,導致 camera 的 i2c hang 住 (?)。
加入 print,camera driver的GPECON a44552aa GPEUDP FF3FFFFF
所以 GPE 14 (IICSCL), 15(IICSDA) 都是 disabled (11b).
回到 1012 : 將GPEUDP 設為disable,結果一樣是no ACK.
1015:把wave driver也改成用I2C, write 似乎OK,read 還是 poll error - no ACK.
1016 : 加一堆 debug message 在 IIC core中。
回到 986 - 一樣在core中加debug message。
發現...log (ref next post),竟然一樣..read operation ends with "ACK NOT received".
commite : 1017
回到1016.

IIC 的動作就是..
  • 把data放到IICDS
  • clear 掉 ack pending bit (IICCON)
  • controller 開始傳送
  • controller 收到 ack後 set ack pending bit
  • 回到第一步,傳送下一個byte

2.15.2008

莫聽穿林打葉聲,何妨吟嘯且徐行。

竹杖芒鞋輕勝馬,誰怕? 一蓑煙雨任平生。
料峭春風吹酒醒,微冷, 山頭斜照卻相迎。
回首向來蕭瑟處,歸去, 也無風雨也無晴。

2.14.2008

利用眼睛虹膜作為相片版權印記

Canon 新的專利:利用眼睛虹膜作為相片版權印記

大概是說相機有一個功能是由viewfinder拍攝 攝影者個虹膜,然後內嵌到鎖拍攝的相片中。

這樣,以後就可以利用相片中的虹膜來辨識出拍攝者。

這倒是蠻直覺的,因為大部分的DSLR還是用ViewFinder而不是用LCD取景。

2.12.2008

問題:
  1. Power Button 有時候沒動作 (when ? after software reset ? 還有其他的 ?)
  2. 太多的message會導致 system freeze.

2.05.2008

Lcd Panel power up sequence

感激Eric與Franz的說明

LCD panel 與MCU的interface一般包含
  1. Panel power
  2. Panel reset
  3. lcd data/clock bus
  4. spi/i2c (option)
其中 spi/i2c bus是為了config panel 的參數,在該panel 產量大時,就不需要了 (pre-program在 panel mcu中)。

以上各部份的power sequence 一般會是..
  1. panel power 打開
  2. 產生panel reset 信號,讓panel mcu reset
  3. 使用spi/i2c program panel mcu 參數
  4. enable lcd data/clock bus
* 在 enable lcd data/clock bus signal 之前,要讓lcd bus維持在 floating mode。以免影響 panel 內mcu的同步。

每個動作要注意 power settle time,要delay。還有 panel reset後,要給panel mcu initialize 的時間,所以也要delay。

有些panel 在一開始送出lcd bus data時,要先送出 all white data。N frame後才可以開始真正的動作。

*有些panel 有提供 PON (panel ON) pin。這是在所有動作 (1,2,3,4)都做完後,最後才動作的pin。意思是告訴 panel : everthing OK, ready to GO!

2.04.2008

MS 要收購 Yahoo,第一個想到的是..

那...以後 Yahoo 的平台都要改 IIS + MS SQL + .NET ?

1.31.2008

nuviphone - Garmin's GPS phone

Garmin 也出手機了 - nuviphone.
大概是3.5 inch lcd. 還有Wifi。
裡面run的是Garmin自己的OS (就是nuvi用的)。


專業PND製造商終於也找不到創新的方法,而必須要向手機靠近...(?)

所以..這是PND的喪鐘 ?

1.27.2008

回來了....

在上海的 雪夜中行走 近4公里後,現在,終於回到家了..

真好...上網要去哪就去哪,不會被Block! 真是自由啊!

1.24.2008

最近的Linux Journal 沒有以前那麼好看了,像以前那樣的hard-core 文章變少了,主題也都一直重複。 大概是網路的關係,很多資訊都沒有網上資料來的清楚。還有chief editor換人,所以雜誌走向有點不同,前一陣子還推出另一本線上雜誌 (TUX ?),focus在novice linux user..

而且,最近 開始一些促銷 活動,像是續訂2年送 LJ Archive DVD。
還有免費試閱3期,再決定是否續訂 的活動..

感覺起來...很可怕,跟以前Linux Journal "穩健"的作風不一樣,有點像是 ..天充文化快倒之前一樣:推出一堆新雜誌,對續訂戶提供大量優惠,對新訂戶提供"讀者文摘式"的試閱活動。

Linux Journal ,,,該不會...也要停刊了吧...
empower technology 推出自有品牌PND (因為目前在GFW後,所以ref link 就不貼了)

規格都差不多,只有 P2800 比較特殊 :支援 Wireless backup, rearview camera。

不曉得這個 Wireless backup/review camera 哪裡有賣 ,他的interface/protocol 是不是已經統一了。

如果是的話,看來 PND裝置就需要有Wifi功能囉
奇怪的是,google了一下 wifi backup camera 和 rearview camera,都沒有真正的產品呀。

倒是google wireless backup review camera 有一堆,但是是用 2.4G 的系統,不是Wifi。

有關review camera 用 wireless 這一點雖然不錯,不用拉video線。但是 camera power 還是要拉線吧..又不能從 後車燈拉。這樣只有開燈時會有電。

比較適當的是從 倒車燈拉出電源線,雖然只有倒車時才有,也還好,但是....倒車燈有提供這麼多電流嗎 ???

bookmark memo

紀錄一下...因為這裡GFW block 很多東西,用proxy 又不能直接subscribe..

http://www.navigadget.com/

1.23.2008

到了上海

不怎麼冷,hotel 可以上網,但是 有好多網站上不去.. (像這個 realchecko.blogspot.com)。
還好gmail 和google上得去。

查了一下,好像是GFW的關係,所以要看 blogspot的 blog,要到 http://www.pkblogs.com/


我真是蠢蛋,就已經進不來了,還寫在這..

應該要bookmark起來才對

1.18.2008

現在Sleep時,插上LCD,會多出2mA。
=== Sleep 時,LCD bus 的 pin 腳要設成 output,low, pull-down enable。

USB 沒有插入時,要把USB Control Block + USB PHY 的power 關掉。

Battery Low Sleep 要改 為3.1V - 還要test一下新的average recal 是否work
明天要作的事:
  1. 清天花板
    1. 買拖把。
    2. 買漂白水。
  2. 整理房間。
  3. 洗衣服。
  4. 準備東西。
    1. 買12" NB 包包 ?
    2. 拿小行李箱 ?
    3. 衣服 ?
  5. 吃eStork 尾牙。
    1. 到南莰
    2. 到新竹

1.17.2008

WAVEDEV - Volume

HandleWaveMessage():
SetGain(newgain) [ By pStreamContext or DeviceContext ]

StreamContext (SetGain )
GainChange( )
{
m_fxGain = MapGain(newgain);
}

MapGain( )
translate and tablet from GainMap[ ]
可以知道最後update到m_fxGain 這個variable中。

這個variable 給很多 ouput.cpp 的 Render( ) 使用。
有趣的地方:

CMidiNote::Render( ) 中,會由 SineTable[] 取出 amplititude,然後 * m_fxGain。

加上log message:
StreamContext:SetGain 19991999
StreamContext:GainChange
StreamContext:MapGain 1999
SecondaryGain fff, Total Gain 1998e667
Index 39, Result 9EF
result 就是經過GainMap[] 後的值。

1.16.2008

Work Notes : Launch Shell cause system hang

新的Shell 在 Explorer Mode 啟動不起來 (cause system hang)。
Solution : Loyal 說,要手動加一個 Key (DWORD) :
 HKEY_LOCAL_MACHINE\Platform\ResetFlag = 1
設完後,就可以開啟Shell 了。
所以,在debug完之前,在release dir 的 platform.reg中加入
[HKEY_LOCAL_MACHINE\Platform]
IF BSP_ENABLE_SHELL !
"ResetFlag"=dword:1
ENDIF

Get, Set Thread Priority

要知道目前自己這個Thread的Priority,用
GetThreadPriority( GetCurrentThread() ); 
要改變/設定自己的Thread Priority,用
SetThreadPriority( GetCurrentThread( ), NewPri );
CE 的 Priority Number 越小,Priority越高。

但是 help 檔說,新版應該要用 CeGetThreadPriority( ), CeSetThreadPriority( ) 。

1.15.2008

Install PB 5.0 and PB 6.0 on the same PC

這是從CE blog 的chat log 出現的 :
http://blogs.msdn.com/dcook/archive/2007/05/13/does-pb-5-0-work-side-by-side-with-pb-6-0.aspx


大致上是說..

PB5.0 和 PB 6.0 不能在同一個PC上的原因大部分是IDE的關係,他們的build system 是完全獨立的,不會互相影響。

但是要讓5.0 和 6.0 一同安裝,要依照以下方法:

  1. 先安裝PB 5.0,因為PB5.0 會搞亂一些設定。
  2. 複製 C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\bin (不包含subfolder)到其他第方。
  3. Install VS2005 和所有SP
  4. Install PB 76.0 和所有SP
  5. 比較 Platman\bin 和妳剛剛複製出去的folder,看看PB 6.0 的folder有缺哪些file,把他copy 回去(注意不要覆蓋已有的file)。
  6. 所有先前PB 5.0 的Connection Manager 都要用PB 6.0 重新create。
大概是這樣,但是還包含很多但書,還有一堆要fix,最好還是去看一下源PO。

gcc + libc6-dev

每次都忘記
aptitude install gcc libc6-dev
Compiler 要加上 developement library ,才能順利build 出 c program。

1.14.2008

平鎮的

­ 兒童健檢

週一至週五

上午 8:30-11:15

下午 1:30-4:15

健保手冊

健保 IC 卡

免費 (七歲前共有9次)

現場掛號

­ 幼兒預防注射

每週二、四、五

下午 1:30-4:15

健保手冊

免費 (另有多項自費疫苗)

現場掛號

1.11.2008

查 board 在 849 ( 849/1024*246/196 *3.3) = 3.43 時停止動作。
此時,1.2 V channel 的值是 397。
所以 cal後 : 3.43 * 372/397 = 3.20。

trac : login fail

Trac 設定中,login 功能一直不能實現,每次都會出現
Internal Error:
Authentication information not available.
google了一堆,有關login 需要做的事:
  • apache2 中 trac 的conf要設定 login path 的section
  • 要用 trac-admin 命令create user,並授予權限 (因為trac default 是anonymouse)。
都做了,還是一樣不成功。

trac 的設置真是太多樣化了,可以選 tracd,cgi和 mod_python三種運作方式,
每種有不同的設定方法。

又,使用apache時,又可以選是不是使用 virtual host 。
設法又不一樣。

所以,真的是....



因為公司中dns不歸我們管,所以apache不能用virtual host,而大部分的說明都是用virtual host。

最後,原因找到就是因為virtual host 的原因,
因為我沒用,所以 trac 的conf 中...
<LocationMatch "/trac/[^/]+/login">
這個寫法有錯,
我的path應該是
/trac/login
而上述的寫法,trac和login間必須要有其他的字。所以login path 是錯的。

修改的方法是直接寫
/trac/login/
就好了。

conclusion :

  • apache中trac的conf 裡要有login 的path,並且要寫對 (移動游標到"login"上,看看path就知道了。
  • 用 trac-admin permission add 給user-name permission。
  • 重開 apache2
* 有關trac-admin 的用法,trac 的wiki (安裝trac就有),有詳細說明。