ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2011年11月17日 星期四

Keypad action in Android Framework

keyboard input (包含 home, power, menu, back..etc) 的動作是在 framework/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

public boolean interceptKeyBeforeDispatching(WindowState win, int action, int flags, int keyCode, int scanCode, int metaState, int repeatCount, int policyFlags) { 可以看到這個 function 根據狀況決定HOME key 要不要處理。
同時還處理 SEARCH , MENU。

所有的 keyevent,會先進到這裡,再到其他地方。

經過這個篩選後,key 會到 framwork/base/policy/src/com/android/internal/policy/impl/PhoneWindow.java
  1. protected boolean onKeyDown(int featureId, int keyCode, KeyEvent event)
  2. protected boolean onKeyUp(int featureId, int keyCode, KeyEvent event)
keydown 是主要作動作的地方,keyup 只是detect longpress 的 cancel。
像 KEYCODE_CAMERA 就會執行下面的code: sendCloseSystemWindows(); // Broadcast an intent that the Camera button was longpressed Intent intent = new Intent(Intent.ACTION_CAMERA_BUTTON, null); intent.putExtra(Intent.EXTRA_KEY_EVENT, event); getContext().sendOrderedBroadcast(intent, null); .. close current window & launch CAMERA app

在這裡處理的還有:
  1. KEYCODE_VOLUME_UP/DOWN
  2. KEYCODE_MEDIA_PLAY_PAUSE
  3. KEYCODE_MUTE:KEYCODE_HEADSETHOOK.KEYCODE_MEDIA_STOP:KEYCODE_MEDIA_NEXT:KEYCODE_MEDIA_PREVIOUS:KEYCODE_MEDIA_REWIND:KEYCODE_MEDIA_FAST_FORWARD:
  4. KEYCODE_MENU
  5. KEYCODE_BACK
  6. KEYCODE_CALL
  7. KEYCODE_SEARCH
所以有 自己新增的 button 要作到 HOT-KEY 功能的,都可以作到這裡。

2011年11月14日 星期一

Matthew Garrett 解決 2.6.38 開始,耗電增加 30% 的問題:ASPM

http://www.phoronix.com/scan.php?page=article&item=linux_aspm_solution

這篇說明 linux kernel 從 2.6.37 進到 2.6. 38 後,耗電增加 30% 的問題。
因為 38 開始依照 bios 回報的內容,開啟/關閉對 PCIe 裝置的電源管理功能...
...
結果...
.. 一堆裝置都回報他門沒有電源管理功能...
.. 所以 kernel 就不管他門了...就放著耗電...


後來 Matthew Garrett 參考 Windows Vista,發現 windows 都還是有管耶。
然後就 follow hardware 的 window driver inf 檔,決定要不要管。 (而不是依照 hardware 的回報)。

就這樣...



... 就說...照 datasheet 寫code的是笨蛋.. (一定會被騙...)

imx51 : SION bit in GPIO config

http://imxcommunity.org/forum/topics/how-to-use-the-sion-bit
說明. GPIO 的 SION bit 就是把 gpio 的 pad 接到 input 端 -- 不管是configure 成 output 還是 input。

說明是以 SD_CMD 為範例。
CMD 是雙向 ,output 完馬上就改 input, read ack。
所以要把 CMD pin 的 SION bit 打開

2011年11月11日 星期五

android, bionic , overview & test program

android 的 bionic 沒有 support pthread_cancel。
 -- 其實還有很多不 support 的,說明在 libc/doc/overview.txt.

另外 android 也提供 bionic libc test code,在
/system/extras/tests/bionic/libc
一般是不會 build 進 system。

可以用
    cd system/extras/tests/bionic/libc
    mm BIONIC_TESTS=1



  1. 這一篇有很好的說明:http://codingrelic.geekhold.com/2008/11/six-million-dollar-libc.html
  2. 這一篇遇到pthread_cancel 不 support ,他workaround 又遇到Dalvik 共用..之後的解決方法: http://blogs.mentor.com/hollisblanchard/blog/tag/android/

2011年11月10日 星期四

ADV7180 detect the video signal discontinue

ADV7180 的 STATUS 3 :
  • bit 4 FREE_RUN_ACT : 沒偵測到signal,所以 output blue screen 中
  • bit 5 STD FLD LEN : 使用目前的 standard 解 video frame 得到的 Field Length 是正確的
  • bit 6 Interlaced : 偵測到 interlaced frame
有些low-end, ill-designed, 亂寫code的 video output device,輸出不太正確的 video signal,會導致 application processor 的 camera input module 錯誤。
可以利用這幾個 bit 來偵測。

當 4 出現代表目前沒信號。
當 5 沒出現,代表 scan line 有錯
當 6 沒出現,代表 沒有偵測到 interlaced frame


但是要用這個 register 有一個限制,要在每一個 frame 都讀一次,否則會被新的 frame 狀態 update ,就抓不到 frame lost 的瞬間了...

2011年11月9日 星期三

dynamic_debug in kernel

kernel 裡面有很多 pr_debug,這是被合 dynamic_debug 這個功能的 printk function。
在 Documentation/dynamic-debug-howto.txt 有說明。

大概就是:
  1. menuconfig 圈選 dynamic_debugCONFIG_DYNAMIC_DEBUG=y
  2. 系統啟動後,手動 mount debugfs : #mkdir /mnt/debugfs #mount -t debugfs none /mnt/debugfs
  3. 把 /mnt/debugfs/dynamic_debug/control 打開來看..
  4. control 會列出所有 pr_debug 所在的source file 和位置,用 echo ... 可以把該 pr_debug 打開或關閉


control 檔的內容大概是: ... drivers/i2c/busses/mxc_i2c_hs.c:154 [mxc_i2c_hs]mxci2c_hs_bus_busy - "%s: Bus Busy!\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:264 [mxc_v4l2_capture]mxc_free_frames - "In MVC:mxc_free_frames\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:413 [mxc_v4l2_capture]mxc_streamoff - "In MVC:mxc_streamoff\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:2825 [mxc_v4l2_capture]camera_init - "In MVC:camera_init\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:574 [mxc_v4l2_capture]start_preview - "MVC: start_preview\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:592 [mxc_v4l2_capture]start_preview - "End of %s: v2f pix widthxheight %d x %d\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:595 [mxc_v4l2_capture]start_preview - "End of %s: crop_bounds widthxheight %d x %d\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:598 [mxc_v4l2_capture]start_preview - "End of %s: crop_defrect widthxheight %d x %d\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:601 [mxc_v4l2_capture]start_preview - "End of %s: crop_current widthxheight %d x %d\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:617 [mxc_v4l2_capture]stop_preview - "MVC: stop preview\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:335 [mxc_v4l2_capture]mxc_streamon - "In MVC:mxc_streamon\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:2714 [mxc_v4l2_capture]mxc_v4l2_resume p "In MVC:mxc_v4l2_resume\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:2681 [mxc_v4l2_capture]mxc_v4l2_suspend - "In MVC:mxc_v4l2_suspend\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:2812 [mxc_v4l2_capture]mxc_v4l2_master_detach - "In MVC:mxc_v4l2_master_detach\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:2756 [mxc_v4l2_capture]mxc_v4l2_master_attach - "In MVC: mxc_v4l2_master_attach\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:2757 [mxc_v4l2_capture]mxc_v4l2_master_attach - " slave.name = %s\012" drivers/media/video/mxc/capture/mxc_v4l2_capture.c:2758 [mxc_v4l2_capture]mxc_v4l2_master_attach - " master.name = %s\012" .. 中間那個 "-" 就代表不印出來,
若是 "p" 就代表要印出來。

所以要是希望 mxc_v4l2_capture.c 裡所有的 pr_debug 都印出來,可以用: echo 'file mxc_v4l2_capture.c +p' > control 如果不要了,就用: echo 'file mxc_v4l2_capture.c -p' > control 如果只是要第 617 行的 stop preview 印出來,就用: echo 'file mxc_v4l2_capture.c line 617 +p' > control
  1. 雖然是enable print,但是 print level 還是follow 當初source code 寫得,所以有些還是要用 dmesg 才會看得到。
  2. 可以對 control 使用grep command,不必每次都cat 出來

2011年11月4日 星期五

Lost Lock in a short period

在接外部影像信號的時候,常常會發生信號短時間中斷的情況。
例如一些糟糕的 dvr 和 media player,在切換畫面 : 播放 --- 設定 時,會有很短一下的信號中斷現象。

而一些爛爛的 application processor 的 bt656 input 端,會發生不同步。最後就導致畫面有 scrolling 的現象。

video converter ADV7180 的 register : status 有一個 bit : LOST_LOCK
可以用來偵測這個現象。

他的定義是:
Lost lock (since last read of this register)

有 "Since last read of this register" 很重要。
這樣就不用設定很高的 polling freq,來抓 lost lock 的瞬間了。



但是有些 dvr 因為畫面切換信號中斷的時間很短,所以 ADV7180 也抓不到。
這個方法就失效了 ....

標籤

網誌存檔