Garmin 也出手機了 - nuviphone.
大概是3.5 inch lcd. 還有Wifi。
裡面run的是Garmin自己的OS (就是nuvi用的)。
專業PND製造商終於也找不到創新的方法,而必須要向手機靠近...(?)
所以..這是PND的喪鐘 ?
1.31.2008
1.27.2008
1.24.2008
最近的Linux Journal 沒有以前那麼好看了,像以前那樣的hard-core 文章變少了,主題也都一直重複。 大概是網路的關係,很多資訊都沒有網上資料來的清楚。還有chief editor換人,所以雜誌走向有點不同,前一陣子還推出另一本線上雜誌 (TUX ?),focus在novice linux user..
而且,最近 開始一些促銷 活動,像是續訂2年送 LJ Archive DVD。
還有免費試閱3期,再決定是否續訂 的活動..
感覺起來...很可怕,跟以前Linux Journal "穩健"的作風不一樣,有點像是 ..天充文化快倒之前一樣:推出一堆新雜誌,對續訂戶提供大量優惠,對新訂戶提供"讀者文摘式"的試閱活動。
Linux Journal ,,,該不會...也要停刊了吧...
而且,最近 開始一些促銷 活動,像是續訂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 還是要拉線吧..又不能從 後車燈拉。這樣只有開燈時會有電。
比較適當的是從 倒車燈拉出電源線,雖然只有倒車時才有,也還好,但是....倒車燈有提供這麼多電流嗎 ???
規格都差不多,只有 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 還是要拉線吧..又不能從 後車燈拉。這樣只有開燈時會有電。
比較適當的是從 倒車燈拉出電源線,雖然只有倒車時才有,也還好,但是....倒車燈有提供這麼多電流嗎 ???
1.23.2008
到了上海
不怎麼冷,hotel 可以上網,但是 有好多網站上不去.. (像這個 realchecko.blogspot.com)。
還好gmail 和google上得去。
查了一下,好像是GFW的關係,所以要看 blogspot的 blog,要到 http://www.pkblogs.com/
我真是蠢蛋,就已經進不來了,還寫在這..
應該要bookmark起來才對
還好gmail 和google上得去。
查了一下,好像是GFW的關係,所以要看 blogspot的 blog,要到 http://www.pkblogs.com/
我真是蠢蛋,就已經進不來了,還寫在這..
應該要bookmark起來才對
1.18.2008
1.17.2008
WAVEDEV - Volume
HandleWaveMessage():可以知道最後update到m_fxGain 這個variable中。
SetGain(newgain) [ By pStreamContext or DeviceContext ]
StreamContext (SetGain )
GainChange( )
{
m_fxGain = MapGain(newgain);
}
MapGain( )
translate and tablet from GainMap[ ]
這個variable 給很多 ouput.cpp 的 Render( ) 使用。
有趣的地方:
CMidiNote::Render( ) 中,會由 SineTable[] 取出 amplititude,然後 * m_fxGain。
加上log message:
StreamContext:SetGain 19991999result 就是經過GainMap[] 後的值。
StreamContext:GainChange
StreamContext:MapGain 1999
SecondaryGain fff, Total Gain 1998e667
Index 39, Result 9EF
1.16.2008
Work Notes : Launch Shell cause system hang
新的Shell 在 Explorer Mode 啟動不起來 (cause system hang)。
Solution : Loyal 說,要手動加一個 Key (DWORD) :
所以,在debug完之前,在release dir 的 platform.reg中加入
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,用
但是 help 檔說,新版應該要用 CeGetThreadPriority( ), CeSetThreadPriority( ) 。
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 一同安裝,要依照以下方法:
- 先安裝PB 5.0,因為PB5.0 會搞亂一些設定。
- 複製 C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\bin (不包含subfolder)到其他第方。
- Install VS2005 和所有SP
- Install PB 76.0 和所有SP
- 比較 Platman\bin 和妳剛剛複製出去的folder,看看PB 6.0 的folder有缺哪些file,把他copy 回去(注意不要覆蓋已有的file)。
- 所有先前PB 5.0 的Connection Manager 都要用PB 6.0 重新create。
1.14.2008
1.11.2008
trac : login fail
Trac 設定中,login 功能一直不能實現,每次都會出現
trac 的設置真是太多樣化了,可以選 tracd,cgi和 mod_python三種運作方式,
每種有不同的設定方法。
又,使用apache時,又可以選是不是使用 virtual host 。
設法又不一樣。
所以,真的是....
因為公司中dns不歸我們管,所以apache不能用virtual host,而大部分的說明都是用virtual host。
最後,原因找到就是因為virtual host 的原因,
因為我沒用,所以 trac 的conf 中...
我的path應該是
修改的方法是直接寫
conclusion :
Internal Error:google了一堆,有關login 需要做的事:
Authentication information not available.
- 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
1.10.2008
1.09.2008
share resouce between drivers - mutex
Driver 之間要share resource,需要一個mutex,這個mutext是named mutex,需要的driver都要用一樣的name 來create,這樣就能用 wait/release 來達到同步。
所有要用的driver都要:
1. Create Mutex
3.使用完後,release :
所有要用的driver都要:
1. Create Mutex
mtx = CreateMutex(NULL,FALSE, TEXT("I2CChannel"));2.使用share device (這裡以I2C為例)前,要取得mutex :
WaitForSingleObject(mtx,INFINITE);argument "INFINITE"會一直wait到其他driver release 這個mutex。
3.使用完後,release :
ReleaseMutex(mtx);4.最後,要注意,driver unload 時要記得close mutex:
CloseHandle(mtx);重點就是 "named" mutex,利用unique name,達到driver間的同步。
1.08.2008
osrmt : open source requirement management tool
James要一個 Requirement Management System,直接google,好像就只有 osrmt (open-source requirement management tool)。
是用 java 寫的,所以install 方式也很java。
在 sourceforge page都找不到任何文件,download 回來解開也是一個 jar 檔而已,沒有 README和INSTALL。
到forume去看,原來要run 這個jar檔,就會產生install文件。
依照內容"click-click-click"後,就出現osrmt目錄,裡面的配置就很像一般的opensource package了。
然後在 doc 下就有 : osrmt_installation.pdf
30 page的安裝說明,要決定是使用 2-tire 或是 3-tire的方式。
哇!安裝起來真是麻煩呀,因為option 很多,連database 都可以選,還要自己改xml...
是用 java 寫的,所以install 方式也很java。
在 sourceforge page都找不到任何文件,download 回來解開也是一個 jar 檔而已,沒有 README和INSTALL。
到forume去看,原來要run 這個jar檔,就會產生install文件。
java -jar osrmt15.jar這個jar 需要X,所以要在X下run (或是重導)。
依照內容"click-click-click"後,就出現osrmt目錄,裡面的配置就很像一般的opensource package了。
然後在 doc 下就有 : osrmt_installation.pdf
30 page的安裝說明,要決定是使用 2-tire 或是 3-tire的方式。
但是說明內容大部分都是Windows平台
哇!安裝起來真是麻煩呀,因為option 很多,連database 都可以選,還要自己改xml...
1.07.2008
found : usb no actin after waking up from sleep.
Wake up 後USB就不能動作了:
結果是 USB/UART multiplex chip 的問題,multiplex chip 的switch id pin 接到 cpu。
cpu 沒有program 成input (float),加上有 pull-up 電阻,所以真正的 USB_ID signale 沒辦法把 id pin 拉到 low,導致 multiplex一直切在 UART 端。
所以 USB 不會通。
sleep 後才發生問題:因為 initial boot 是設對的,但是 wakeup/sleep 的gpio program function 又把他設回去了。
結果 : 寫在function 的 power-up function 中比較保險。
最好還是不要在USB D+/D- 上動手腳。
結果是 USB/UART multiplex chip 的問題,multiplex chip 的switch id pin 接到 cpu。
cpu 沒有program 成input (float),加上有 pull-up 電阻,所以真正的 USB_ID signale 沒辦法把 id pin 拉到 low,導致 multiplex一直切在 UART 端。
所以 USB 不會通。
sleep 後才發生問題:因為 initial boot 是設對的,但是 wakeup/sleep 的gpio program function 又把他設回去了。
結果 : 寫在function 的 power-up function 中比較保險。
最好還是不要在USB D+/D- 上動手腳。
1.05.2008
Sirf InstantFix II
Sirf 的新技術,可以將 cold start time由 30 sec縮短到 5sec。
從 其他站台的報導文件好像是說....利用前一次關機前定位的時間和定位資訊,猜測目前(利用目前時間)的衛星位址,來省去需要由衛星下載資訊的30sec時間。
以上都是我猜的....
從 其他站台的報導文件好像是說....利用前一次關機前定位的時間和定位資訊,猜測目前(利用目前時間)的衛星位址,來省去需要由衛星下載資訊的30sec時間。
以上都是我猜的....
1.04.2008
要configure (poweron) usb function controller,有一些register要設:
MISCCR
PHYCTRL
UCLKON (USB Clock Control)
MISCCR
- bit 12 (SEL_SUSPEND) : 0 Normal Mode, 1 Suspend Mode
- bit 4 (nSW_PHY_OFF_USB) : 0 Power Off USB PHY, 1 Power ON PHY
- bit 2 (FUNC_RESET)
- bit 1 (HOST_RESET)
- bit 0 (PHY_RESET)
使用上bit 設為1 就是reset,但是要記得,要設回0。
code上的說明是,要先 reset PHY,10us 後再reset FUNC和HOST
PHYCTRL
設定PHY用的crystal,都是0就是...外接crystal 48MHz,device modePHYPWR
- bit 31 (COMMON_ON_N) : ohci (host) crystal 在suspend mode是否仍要power on。 0 : Off
- bit 5:4 (ANALOG_POWERDOWN) : 01 , 關掉 PHY2.0 的analog part。 其他的值:power on (normal)
- bit 3 (PLL_REF_CLK) : 0 使用外部crystal
- bit 2 (XO_ON) : 0 XO block power down in suspend mode.
- bit 1 (PLL_POWERDOWN) : 0 : PHY2.0 PLL power down.
- bit 0 (FORCE_SUSPEND) : 0 normal operation, 1 apply suspend signal for power saving,
很複雜,一個PHY竟然區分成 PLL, Analog Part
UCLKON (USB Clock Control)
一堆,DETECT_VBUS,host/function clock enable/disable
1.03.2008
ADV7180 - about interrupt
ADV7180 有一個中斷輸出 pin : INTRQ.
先看一些縮寫好了 -____-
VDP : (VBI Data Processor).
VBI : Vertical Blanking Interval.
這是因為analog的電視把一些data (例如:字幕),放到畫面的 vertical blanking interval (就是畫面裡,上,下不會顯示出來的區域)。
所以需要額外的processor 來處理這一段的資料。
放在這個區域的資料可能會有:
Interrupt System Register Map : register 0x40 ~ 0x9C (不連續)
這一段 的register 好像都是設定 interrupt,開頭有個小小的 * mark:
configure interrupt 的trigger source 要program interrupt mask,總共有4個interrupt mask.
但是有說明的部份,只有和VDP相關的部份,對於video detection 則沒有提,只有在register map 中的 bit name... (是要自己猜 ?)。
要偵測 video signal 是否存在,猜測幾個 interrupt status bit:
只read 0x42 : SD_LOCK, SD_UNLOCK:
也就是說:
但是若是啟動時是 Video OUT,會有SD_UNLOCK bit。
先看一些縮寫好了 -____-
VDP : (VBI Data Processor).
VBI : Vertical Blanking Interval.
這是因為analog的電視把一些data (例如:字幕),放到畫面的 vertical blanking interval (就是畫面裡,上,下不會顯示出來的區域)。
所以需要額外的processor 來處理這一段的資料。
放在這個區域的資料可能會有:
- teletext
- CC/CCAP (Close Caption)
- CGMS (Copy Generation Management System)
- WSS (Wide Screen Signaling)
所以ADV7180 的 VDP (Vertical Blanking Interval Data Processor) 可以decode 這些standard因為這些 VBI 的資料不是一直都有,VDP處理也需要時間,所以VDP 可以trigger Interrupt,programmer 可以設定,當VDP處理完哪些資料後,trigger interrupt。
Interrupt System Register Map : register 0x40 ~ 0x9C (不連續)
這一段 的register 好像都是設定 interrupt,開頭有個小小的 * mark:
To access the registers listed in Table, SUB_USER_EN in register 0x0E must be programed to 1.所以說,要access interrupt 相關的register,要先把 register 0x0E 寫入 0x20 才行..
那寫完後要不要寫回0x00?
configure interrupt 的trigger source 要program interrupt mask,總共有4個interrupt mask.
但是有說明的部份,只有和VDP相關的部份,對於video detection 則沒有提,只有在register map 中的 bit name... (是要自己猜 ?)。
要偵測 video signal 是否存在,猜測幾個 interrupt status bit:
- SD_LOCK_Q
- SD_H_LOCK
- SD_V_LOCK
只read 0x42 : SD_LOCK, SD_UNLOCK:
- Video 插入時,會有SD_LOCK
- Video 移出時,會有SD_UNLOCK
也就是說:
- Video 插入
- SD_LOCK = 1
- 寫入 reg 0x43 = 0x01 (clear SD_LOCK)
- SD_LOCK = 0 (雖然這時候 Video 依然插著)
- 拔出 Video
- SD_UNLOCK = 1
- 寫入 reg 0x43 = 0x02 (clear SD_UNLOCK)
- SD_UNLOCK = 0 (雖然這時候 Video 還沒插入)
- --- 回到 1---繼續
上面 "寫入 reg 0x43" 是 ADV7180 的interrupt 動作機制,意思ack interrupt。!!發現 initstate 是 assume video in,所以啟動時若是Video In,則 SD_LOCK bit 不會set,
但是若是啟動時是 Video OUT,會有SD_UNLOCK bit。
1.02.2008
Camera Interface.
CAMIF 的bus priority 只能比LCD 的priority 低,要比其她hardware都高。
CAMIF 有兩個path : preview, Capture。
preview 和 capture path 都各有4個target frame memory (4 pingpong frame memory)。
YCbCr是Capture Path使用的方法,Y, Cb, Cr資料非別放在每個frame的獨立page,所以program 可以獨立得到image的Y frame資料 (或Cb, Cr資料)。
RGB是Preview Path使用的方法(Capture path好像也可以設定成這樣),可以選用 32 bit/16bit模式的RGB資料,但是每個pixel的RGB資料是組合在一起的(2或4bytes),依序放置的frame memory中,不像 YCbCr模式的方開放置。
MSDMA (不知道是什麼的縮寫)
MSDMA只能在previewpath使用 (SEL_DMA_CAM='1')。
MSDMA可以作memory data scaling,但是只支援 YCbCr Mode。
REGISTERS
CISRCFMT : 設定 source video 的format。
接下來是frame memory 的設定.. CODEC Path 的 YCbCr Frame Memory.
camif 的DMA會自動將image的內容依照各個frame,依序送到這些register指定的位置。
CICOTRGFMT : 設定Codec path 的 target image (就是 camif 轉換後,放到frame memory的格式..)
CICOCTRL : 設定DMA每次要搬的byte(word?)數
Preview Path 的registers
CIPRCLRSA1.2.3.4: ping-pong frame memory 的設定register。
CIPRTRGFMT : 設定 target (轉換後的) image format
CIPRCTRL : preview path 的DMA 控制。
CIPRSCPRERATIO : pre-scaler ratio
camera interface 的重點好像就是在選擇 codec path 和camera interface上,這兩個path 是獨立的。
功能好像也一樣 (將codec path 的output設為 RGB的話,就和preview path 一樣了)。
preview path 有 水平處理數不得超過640的限制,Codec path 則沒有說明。
另外就是 preview path 還有一路 MSDMA可以選擇,但是...不知道要怎模用...
CAMIF 有兩個path : preview, Capture。
preview 和 capture path 都各有4個target frame memory (4 pingpong frame memory)。
意思是依照1,2,3,4,1,2,3,4,,,依序放置 ?pixel 的格式有YCbCr和RGB兩種方式。
YCbCr是Capture Path使用的方法,Y, Cb, Cr資料非別放在每個frame的獨立page,所以program 可以獨立得到image的Y frame資料 (或Cb, Cr資料)。
RGB是Preview Path使用的方法(Capture path好像也可以設定成這樣),可以選用 32 bit/16bit模式的RGB資料,但是每個pixel的RGB資料是組合在一起的(2或4bytes),依序放置的frame memory中,不像 YCbCr模式的方開放置。
MSDMA (不知道是什麼的縮寫)
MSDMA只能在previewpath使用 (SEL_DMA_CAM='1')。
MSDMA可以作memory data scaling,但是只支援 YCbCr Mode。
依照示意圖,MSDMA好像只是DMA,單純的作memory 到 memory的搬移,但是她還在搬移的時候作scaling的運算。
奇怪得的是,MSDMA在圖中,是作為 CAMIF--preview path的輸入端,也就是說,MSDMA處理過後的資料,進入camif的preivew path (?那MSDMA鎖需要的frame data是哪一個device放到memory中的?)
REGISTERS
CISRCFMT : 設定 source video 的format。
- Bt601, Bt656 ?
- YCbCr Order
- H, V Size
- 原來在 CISRCFMT中設定的source H, V size。經過這個register 中設定的上下
- CIWDOFST只包含一側(上,左)的offset設定,另一側(下,右)在CIWDOFST2 設定。
- crop後的image 水平 pixel 必需要是8的倍數,同時又是PreHorRatio的4倍數
- crop後的image 垂直 pixel ,作scale-down時,必需要是 PreVerRatio的倍數。
- 左右切下來(不顯示)的pixel數 >= Source 水平pixel數 x PreHorRatio_Pr
要作software reset 有一定的sequence , 601 mode和656 mode還不一樣..
要配合 CISRCFMT register作設定...有點囉唆
接下來是frame memory 的設定.. CODEC Path 的 YCbCr Frame Memory.
- CICOYSA1.2.3.4
- CICOCBSA1.2.3.4
- CICOCRSA1.2.3.4
camif 的DMA會自動將image的內容依照各個frame,依序送到這些register指定的位置。
CICOTRGFMT : 設定Codec path 的 target image (就是 camif 轉換後,放到frame memory的格式..)
- Codec path 水平/垂直 pixel 數 (Horizontal/Vertical Size)
- mirror / rotation
又有限制:水平/垂直pixel數一定要比 source 小 (因為crop關係 ?)
水平pixel數必需要是16的倍數
在RGB Mode,垂直pixel數比需要是8的倍數
CICOCTRL : 設定DMA每次要搬的byte(word?)數
- DMA是一行一行 (一條一條水平線)的搬video 信號到 frame memory中,所以要告訴DMA 每一行要搬幾個byte(word)。
- DMA的一次搬移動作分為兩個階段 : main burst, remained burst。
Preview Path 的registers
CIPRCLRSA1.2.3.4: ping-pong frame memory 的設定register。
CIPRTRGFMT : 設定 target (轉換後的) image format
- Horizontal pixel number (16bpp時,4的倍數。 24bpp時,2的倍數)
- Vertical pixel number (8的倍數)
- mirror / rotate
CIPRCTRL : preview path 的DMA 控制。
DMA是一行(水平線)一行的搬,以 VGA ( 水平640 pixel),16 bpp 為例:
一個word可以放兩個pixel 。
所以一行 640/2 = 320 word。
320 % 16 = 0 (整除),所以 main brust = 16, remained brust = 16。
CIPRSCPRERATIO : pre-scaler ratio
- 這部份要參考CODEC path 的說明 (設法一樣)。
camera interface 的重點好像就是在選擇 codec path 和camera interface上,這兩個path 是獨立的。
功能好像也一樣 (將codec path 的output設為 RGB的話,就和preview path 一樣了)。
preview path 有 水平處理數不得超過640的限制,Codec path 則沒有說明。
另外就是 preview path 還有一路 MSDMA可以選擇,但是...不知道要怎模用...
訂閱:
文章 (Atom)