2009年12月3日 星期四

如何開發Android 程式

安裝Android SDK
http://ithelp.ithome.com.tw/question/10011929

如何下載與安裝Eclipse
http://ithelp.ithome.com.tw/question/10011996

深入淺出Android程式設計(9)-如何安裝Eclipse外掛(ADT)
http://ithelp.ithome.com.tw/question/10012087

深入淺出Android程式設計(12)-如何在Eclipse上開發Android應用程式(上)
http://ithelp.ithome.com.tw/question/10012318

深入淺出Android程式設計(14)-如何在Eclipse上開發Android應用程式(下)
http://ithelp.ithome.com.tw/question/10012466

[轉貼]淺談 EC/KBD 與OEM Application key

目前市面上的EC 大多內含Keyboard Interface, 一般本身也把 60/64 port 那邊做成一個8042 相容的keyboard controller, 支援標準與OEM command, 而在OS 下, 一般程式是就如同一般keyboard input, 的對待.在驅動程式面 Windows 下會由i8042prt.sys 的驅動程式驅動它的上層在掛一個kbdclass.sys 支援, 而PS/2的Mouse則是由 i8042prt.sys 掛 mouclass.sys 支援, 在i8042prt.sys 會負責抓取Scancode 往kbdcalss.sys 發送, 在kbdclass.sys 中會轉成windows本身支援的OS virtual key, 在這過程中, Windows 2000 與XP還提供了一個 Scancode mapper, 可以透過Registry [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] 下定義Scancode 須要remap 的key. (ref. Archive: Scan Code Mapper for Windows)
但是目前Notebook 上還有許多 Hotkey. 如控制Brightness, Audio Volume, Device ON/OFF 等.
這在實做上可以分為幾個不同層面
在早期OS上, 如DOS/Win3.1 的機器上, 事情簡單許多, 就通常 EC本身自己控制對應的硬體界面即可, 如Brightness 可以由EC本身的PWM interface 輸出, Audio Volume 可以用GPIO/I2C 去控制 digital resistor or amplifier. 因為OS本身不管理這些介面, 所以也就不與理會
在現代ACPI award 的OS下, 這些介面漸漸納入OS 控制, 早期如 Brightness 從XP 由driver support 到現在ACPI 3.0 由ACPI正式support, 這時就不是單純由EC實做就可以! 而Audio Volume早期的AC97 codec 可以由EC 提供 GPIO直接去 Up/Down, 然後AC97本身的Driver會去維護. 進入HD Audio後, 目前已知Realtek已經不支援這樣的function. 轉而建議透過OS支援的Multimedia key 去實作
而Device Power On/Off control 的機制, 則還沒被 ACPI/OS 納入規範中, 因此也還是可以簡單的透過EC 使用GPIO 去ON/OFF, 但是此時出現新的問題, 如何提供指示(indicator)告訴使用者, 正在處理該項事情, 以防止不小心誤按時, 使用者摸不著頭緒, 為啥Device突然被關或是打開.

這時我所知的有兩種選擇
1.使用EC透過ACPI Device 與 Q event等方式, 在OS下需要implement 一個對應的ACPI Driver 去 接收這樣的event並使用一個長駐的應用程式去處理對應的事件

2. 透過 OEM Applcation key, MSFT 有提供一個 scancode.doc 的文件, 裡面提到 win+numberic(0 ~ 9) 是保留給OEM 使用的, 此時EC可以將一些特殊的function 透過發出特定的 application key 來傳遞給OS, 而透過長駐的application 去hook keyboard event 來獲知該function.

這兩種的方式各有優缺點.
第一種方式缺點是必須寫一個ACPI driver去處理
而第二種優點是不需要寫driver. 缺點是使用者可能會不知道需要安裝長駐程式!

因此一般通常是採用1.的方法.在裝driver的時候, 順便把長駐程式掛進系統!
另外Application 收到訊息後除了可以顯示資訊也可以透過其他方法另外作一些其他特殊功能! 不過正規做法還是在ACPI Device 透過對應的method 是比較好的!可以把ACPI 當作一個 abstract layer 那麼以此發展的程式, 可以快速沿用許多平台!縱使有許多不同的硬體設計! 例如目前在我使用的Thinkpad X60 可以找到許多已經定義的ACPI driver method 有的還是透過 SW SMI 去處理, 可以suppoer 最多3顆電池等等..