Email me: jollen # jollen.org

more: Jollen 的 Embedded Linux 教育訓練

« March 2009 | (回到Blog入口) | May 2009 »

April 2009 歸檔

April 1, 2009

CTimes 矽導論壇:行動通訊產業 - 看中國崛起與市場機會

(原文刊載於零組件雜誌2009年3月份)

近來讀到幾則報導二零零九年移動通信大會的新聞,提到中國在手機產業中,營造了一股崛起的氣氛,有些人更直接了當提出中國手機產業崛起的看法。從產品角度來看,中國在這次大會的產品展示,幾乎涵蓋了所有產品線,可想見中國在手機產業的研發能量頗為驚人。以中興通訊來說,其自主研發的手機產品線,己經涵蓋了各種作業系統,以及三端手機(中階、高階與低階),顯見其產品線的佈局頗為完整。

中國的華為也成功進入全球幾家主要的電信營運商,同時目前也是部份地區的主要供應商之一,可見中國手機產業也具備了電信營運商模式的能力。開放式手機平臺對中國在國際業務的拓業,也會有正向的幫助。二零零八年全球GSM手機出貨排名,華為以24.4%的佔有率排名第二,己經超過 Nokia。華為在移動通信大會上也展示了使用 Android 平臺的手機,因此在結合網路服務與應用客製化方面,華為做足了準備,有機會透過 Android 手機拓業國際市場。

中國的禹華通信近期也推出了 Android 手機的參考設計,這個參考設計採用 Marvell PXA-310 平臺,這是除了 Qualcomm 外的另一個 Android 手機參考平臺。禹華通信的 Android 手機平臺也有客戶採用了。現在,中國許多手機廠商陸續備齊了完整的 Android 設計平臺,只要 Android 應用程式的研發能量能到位,或是能善加利用 Android 開發者社群的資源的利用,未來中國手機製造商(ODM)在 Android 客製化手機的市場,會有一定的競爭力。

至於中國本地的 Android 手機市場機會在哪裡,以下就過去與中國業者的往來,整理一些資訊與大家分享。

目前,2G 的 Android 手機(GPRS/EDGE)在中國市場部份,短期還是會有不錯的市場需求,特別與業者合作的客製化手機部份,特別被看好。支援 Android 的 2G 手機參考平臺也相對完善,例如上述提及,禹華通信推出的參考設計,就是屬於 GPRS/EDGE 的規格。Openmoko 的 GTA02(Neo FreeRunner)本身也是 2G 規格,目前也有多家加值應用開發商(Value-Added Reseller)在詢問採用的可行性,當然軟體部份考慮的是 Android 平臺,而非 Openmoko 本身的軟體。

在 3G 手機部份,許多人認為 3G 在幾年內勢必成為市場主流,屆時 2G 手機將會進一步降價,因此 2G 手機本身的利潤空間也會比較壓縮。Android 手機在 3G 的市場,則是需要比較多的資源整合,以及可行的商業模式,這是 Android 手機研發業者的主要挑戰。

針對 Android 平臺的 3G 手機,中國本土的市場機會之一是 TD-SCDMA 系統。原因是,TD-SCDMA 雖是 4 大 3G 標準之一,但起步較晚,成熟度也較低。以這個角度來看,TD-SCDMA 系統的 Android 3G 手機,仍有待研發資源的投入,因此有一個切入的機會點。以市場角度來看,中國最大電信商中國移動也投入不少研發資金在 TD-SCDMA 的手機研發;TD-SCDMA 目前的主要問題之一就是終端裝置,由此來看,終端裝置開發商會有許多取得中國移動支持的機會。

April 8, 2009

Linux Input Device 介紹: APIs

Linux 的 Input Device 是重要的一個 subsystem,在進行實例介紹前,先大略了解一下相關的 API。

Linux Input Device

input.c是Linux的”input”驅動程式,主要支援鍵盤與滑鼠的輸入;input.c介面有趣的地方是採用了事件(event)的方式來處理輸入,以下是input.c介面重要的資料結構與函數:

* struct input_dev
* void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
* void input_register_device(struct input_dev *);
* void input_unregister_device(struct input_dev *);
* void input_register_handler(struct input_handler *);
* void input_unregister_handler(struct input_handler *);

Linux 的input機制可用來實作「虛擬鍵盤」或「虛擬滑鼠」,只要呼叫input_event()將輸入資料發佈給input handler即可。

struct input_dev是用來描述輸入事件的重要資料結構,其原型宣告如下:

struct input_dev {

void *private;

int number;
char *name;
unsigned short idbus;
unsigned short idvendor;
unsigned short idproduct;
unsigned short idversion;

unsigned long evbit[NBITS(EV_MAX)];
unsigned long keybit[NBITS(KEY_MAX)];
unsigned long relbit[NBITS(REL_MAX)];
unsigned long absbit[NBITS(ABS_MAX)];
unsigned long mscbit[NBITS(MSC_MAX)];
unsigned long ledbit[NBITS(LED_MAX)];
unsigned long sndbit[NBITS(SND_MAX)];
unsigned long ffbit[NBITS(FF_MAX)];
int ff_effects_max;

unsigned int keycodemax;
unsigned int keycodesize;
void *keycode;

unsigned int repeat_key;
struct timer_list timer;

int abs[ABS_MAX + 1];
int rep[REP_MAX + 1];

unsigned long key[NBITS(KEY_MAX)];
unsigned long led[NBITS(LED_MAX)];
unsigned long snd[NBITS(SND_MAX)];

int absmax[ABS_MAX + 1];
int absmin[ABS_MAX + 1];
int absfuzz[ABS_MAX + 1];
int absflat[ABS_MAX + 1];

int (*open)(struct input_dev *dev);
void (*close)(struct input_dev *dev);
int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
int (*upload_effect)(struct input_dev *dev, struct ff_effect *effect);
int (*erase_effect)(struct input_dev *dev, int effect_id);

struct input_handle *handle;
struct input_dev *next;
};

定義按鍵

我們可以設定struct input_dev裡的evbit欄位,來定義所要接受的輸入類型,目前共有8種輸入類型如下:

* EV_KEY:Keys and buttons(按鍵與按鈕)。
* EV_REL:Relative axes(相對座標)。
* EV_ABS:Absolute axes(絕對座標)。
* EV_MSC:Misc events(其它事件)。
* EV_LED:LEDs。
* EV_SND:Sounds(聲音輸入)。
* EV_REP:Autorepeat values(自動重覆數值)。
* EV_FF:Force feedback事件。

以下是一個範例,我們指定dev可接受EV_KEY事件:

dev.evbit[0] = BIT(EV_KEY);

evbit是一個陣列,每個元素可以索引一種輸入類型。每種輸入類型均可指定特定的輸入資料,例如:TAB鍵。指定方式是使用set_bit()或BIT巨集來設定每種輸入類型的陣列。以下是各輸入類型的欄位名稱:

* keybit[NBITS(KEY_MAX)]:Keys and buttons(按鍵與按鈕)。
* relbit[NBITS(REL_MAX)]:Relative axes(相對座標)。
* absbit[NBITS(ABS_MAX)]:Absolute axes(絕對座標)。
* mscbit[NBITS(MSC_MAX)]:Misc events(其它事件)。
* ledbit[NBITS(LED_MAX)]:LEDs。
* sndbit[NBITS(SND_MAX)]:Sounds(聲音輸入)。
* ffbit[NBITS(FF_MAX)]:Force feedback事件。

以下是使用set_bit()的範例:

* set_bit(KEY_UP, dev.keybit);
* set_bit(KEY_LEFT, dev.keybit);

或是使用BIT巨集也可以:

* keybit[0] = BIT(KEYUP) | BIT(KEY_LEFT);

input.h裡做位元運算的3個巨集如下:

* NBITS(x):計算要幾個陣列元素,才夠紀錄第x個位元。
* BIT(x):傳回單獨第x個位元為1時所代表的數值,例如:x=0時為0x1,x=1時為0x2,x=2時為0x4。
* LONG(x):第x個位元是屬於第幾個陣列元素(即索引值)。

我們先設定驅動程式能接受EV_KEY事件,然後指定EV_KEY事件的特定輸入值為KEY_UP與KEY_LEFT按鍵。不同事件的輸入資料定義,請參考input.h檔,例如以下是EV_KEY事件的按鍵1~按鍵9定義:

/*
* Keys and buttons
*/

#define KEY_1 2
#define KEY_2 3
#define KEY_3 4
#define KEY_4 5
#define KEY_5 6
#define KEY_6 7
#define KEY_7 8
#define KEY_8 9
#define KEY_9 10

設定好struct input_dev後再呼叫input_register_device()註冊至上層。當”input device”註冊至kernel後,當該input device被開啟時,便呼叫input device的open method;當input device關閉時,便呼叫input device的close method。
實作input device的open method時,若成功應傳回0,失敗的話則傳回任意的非零值;close method則不須傳回值。

Report 按鍵

使用者的按鍵往上層回報所使用的API如下:

* input_report_key(struct input_dev *dev, unsigned int code, int value);
* input_report_rel(struct input_dev *dev, unsigned int code, int value);
* input_report_abs(struct input_dev *dev, unsigned int code, int value);
* input_report_key與input_report_rel其實都是使用input_event()的巨集,input_event()的函數原型與參數說明如下:
* void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);

* @dev:指向input device的指標。
* @type:輸入類型(EV_KEY、EV_ABS等)。
* @code:輸入按鍵(例如EV_KEY的KEY_1)。
* @value:按鍵值。

Input Handler

任何的按鍵輸入,都應呼叫input_event()來將input event送到input.c,再由input.c分派事件(遶送)到每一個”input handler”。有註冊input handler的驅動程式,都能讀取輸入資料。

April 12, 2009

「Android Day Package -- Android 應用程式新手入門」

「Android Day Package -- Android 應用程式新手入門」整理了這陣子我在研討會的演講材料,包含:

  1. 簡報一份
  2. Android 入門教學文件共11集
  3. 範例程式4例

因為研討會是一天的演講活動,因此這些內容很適合新手做為「學習 Android 應用程式」的入門教材,大約只需要一天的時間,就能初步了解 Android 的開發工具使用,並了解 Android 的應用程式模式,故取名為「Android Day Package」,期望能提供一個「Android 新手一天入門」的教學套件。請不吝指教。

簡報的部份是受零組件雜誌邀請,進行一天的 Android 演講活動,所特別製作的簡報;範例則是參考 Android SDK 所撰寫的實例,範例是配搭簡報進行實例講解所使用的程式碼。[下載 Android Day Package] 後,可搭配以下共11份教學文件學習;以下的教學文件是為製作簡報時的筆記,特別整理成一份教學文件與大家分享。

課程主題

Android Day Package 提供以下的課程主題。

1. 開放手機平台發展現況 (1hr)
‧開放手機平台陣營
‧授權模式比較
‧市場現況
‧行銷與推廣策略

2. Android 入門 (1.5hr)
‧安裝 SDK
‧Android模擬器
‧Android開發工具 (ADT)
‧Android除錯工具 (ADB)
‧Hierarchy Viewer

3. Android應用程式模式 (2hr)
‧Android Framework
‧Activity
‧Service
‧BroadcastReceiver
‧Process types
‧Views, ViewGroup
‧Design Screen
‧AndroidManifest.xml
‧Intents

4. Android應用程式開發 (1hr)
‧Hello, Moko 範例程式
‧Openmoko Neo FreeRunner手機安裝
‧安裝 apk套件
‧使用 Neo FreeRunner實機展示

Android 教學

Revision: 2009/04/19

April 19, 2009

出現搭載 Android 平臺的 PMP 產品

LinuxDevices.com 報導了一則很酷的消息 [Android-based PMP to ship in October]。 一家名為 [GiiNii] 的公司,將在 10 月份開始銷售使用 Android 平臺的 PMP(portable media player);該公司在明年的 1 月份也會銷售 Android 平臺的 DPF(digital picture frame)。


(圖片來源:GiiNii)

這台名為 Movit Mini 的 PMP 實際上就是一個「MID」概念的產品,但 GiiNii 並不將 Movit Mini 稱為 MID,而是將它定位為 PMP。Movit Mini 不同於市面的泛 MID 產品,GiiNii 重新做了產品定位:

1. 外觀更輕薄,這意味著 Movit Mini 比 MID 更具攜帶性(mobile)

2. 螢幕尺吋更小,傳統的 MID 是 4.8 吋,Movit Mini 縮小為 4.3 吋

3. 畫面解析度降為 480x272

不管是 PMP 或 MID,因為都具備觸控螢幕的功能,因此比 Netbook 更適合搭載 Android。報導中也指出,Movit Mini 因為使用 Android 平臺,因此這是一個具備「能存取 Google apps」的 PMP,頗為有趣的產品。

現今的 MID 大多使用 Intel Moblin 平臺(處理器當然使用 Intel 自已的 Atom),因此除了 UI 方面的差異外,似乎比較難表現 MID 本身的產品差異性,當然產品定位也就比較「搖晃」一點。

Android Netbook 行不行:從產品角度來思考

社群開發者將Android移植到EeePC後,興起一股「Android小筆電」討論風潮。Android小筆電的概念就是這樣來的;由開發者給市場的一個考題。市場上一陣Android小筆電產品的新聞,幾家品牌大廠,對Android小筆電市場更是磨刀霍霍。對於這陣Android小筆電的風潮要如何解讀?在此分享個人的觀察與想法,請不吝指教。

Android小筆電的熱潮,起之於玩家對技術的好奇心;對於Android小筆電產品的討論,則是廠商與使用者的期待與想像。從技面的角度來看,Android小筆電仍有使用介面(UI)上的疑慮,尚不足以產品化。由於Android介面的設計預設對象為手機,因此在小筆電上的畫面表現較不理想,操作方面亦同。Android小筆電上仍有技術缺口。

基於「應用程式」概念的小筆電,因是「使用習性」的問題,使用者還是喜歡微軟的作業系統,Linux小筆電還是佔不到便宜。

使用者免不了將Linux小筆電與微軟系統的小筆電拿來相提並論。Linux上有OpenOffice辦公軟體,但微軟系統有使用者更習慣的Office套裝軟體;Linux上有Thunderbird電子郵件軟體,但微軟系統有使用者更習慣的Outlook軟體;無論是上網、電子郵件還是即時通訊,Linux小筆電上的「應用程式」都讓使用者操作得很沒有安全感。

從另外一個角度來思考。

基於「網路服務」概念的Android平臺,因為與微軟系統的小筆電有很大的差異性,因此似乎存在不錯的機會。Android平臺不基於Linux桌面技術,我們沒有辦法將OpenOffice軟體,或是Firefox瀏覽器安裝在Android小筆電上,正好與現有的小筆電有很大的差異性,也給了新產品定位的大空間。

產品定位方面,把Android做為取代微軟系統或Linux桌面的想法,反而讓Android小筆電失去了這個差異性;當大家開始討論Android小筆電上能不能執行辦公室軟體時,誰知道,會不會又像Linux小筆電產品般的結果。

Android平臺的產品可以擁有更多的區隔性,因此機會之一是尋找或創造不同的產品「使用概念」。現階段Android小筆電仍處於技術玩票性質,這是由玩家帶起的概念。要讓Android小筆電產品化仍要補齊技術上的不足。

關於 April 2009

此頁面包含了在April 2009發表於Jollen's Blog的所有日記,它們從老到新列出。

前一個存檔 March 2009

後一個存檔 May 2009

更多信息可在 主索引 頁和 歸檔 頁看到。

Top | 授權條款 | Jollen's Forum: Blog 評論、討論與搜尋
Copyright(c) 2006 www.jollen.org