2010年5月27日 星期四

2010年5月25日 星期二

CAN晶片介紹(MCP2510)


MCP2510是由Microchip所生產可支援FULL CAN 2.0A/B的晶片,該晶片支援CAN Bus 上限1Mbps的通訊能力,它是利用SPI介面和微控器進行溝通。您可以在http://www.alldatasheet.com/datasheet-pdf/pdf/74933/MICROCHIP/MCP2510.html下載它的使用手冊。

2010年5月22日 星期六

Google公布了Android 2.2 Platform

Google在今年Google I/O大會過程中公布了Android 2.2 Platform,
大家可以去進行SDK , ADT與NDK的更新了。


2010年5月20日 星期四

[轉貼]通用汽車與Google合作 為Chevrolet Volt提供導航功能

通用汽車在早前舉行的CES大會上公佈一款汽車專用軟件《OnStar Mobile 》,讓車主無論身處何地,都可透過智能手機即時監控汽車狀況及控制汽車上的功能。官方表示目前支援多個手機平台,包括: Android、iPhone、Blackberry等,不過該軟件暫時只能應用在即將推出的「Chevrolet Volt」汽車上。

最近通用汽車發佈新聞稿表示,旗下子公司OnStar將與Google合作,為「Chevrolet Volt」汽車加入導航系統。通用汽車指出,新Android版本的《OnStar Mobile 》已經加入了「導航」標籤,車主只需按下標籤,就能在Android手機上看到汽車的所在位置。另外,車主還可將Google地圖搜索結果發送至汽車上,然後通過OnStar的導航系統接收,即時顯示車主行車路線。

除了以上新增導航功能外,原本OnStar系統功能包括: 查看汽車電量狀況、進行遠端充電、控制車門開鎖或解鎖、開啟引擎、啟動車內空調等。該軟件目前是測試階段,仍未推出完整版本,所以有部份功能未能夠應用,但通用汽車預計在正舉行的Google I/O大會展示這款《OnStar Mobile 》,到其時再檢視用家報告作參考。



2010年5月16日 星期日

如何觀察Activity從Running到Pause或從Pause到Running

其步驟如下:
1. 建立一個新專案,並實作onPause()和onStart()兩個函式。
2. 利用Toast物件來顯示Activity的狀態。
3. 執行此專案。

4. 執行另一個專案,如snake,此時會看到原來的專案顯示處於Pause狀態。

5. 在模器手機上按下"回到上一個動作"的按鈕,您可看到顯示處於Running狀態。

package com.example;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class TestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

@Override
protected void onPause() {
// TODO Auto-generated method stub
Toast.makeText(this, "Pause", Toast.LENGTH_SHORT).show();
super.onPause();
}

@Override
protected void onStart() {
// TODO Auto-generated method stub
Toast.makeText(this, "Running", Toast.LENGTH_SHORT).show();
super.onStart();
}

}

用UML來表示由AIDL所產生的介面內部物件的關係圖


當我們宣告一個AIDL檔案時,發現AIDL工具會幫我們產生一個可以用於Activity和Service間進行行程間通訊(Inter-Process Communications)的介面程式,從圖中我們可以看出該程式是一個介面,用來讓Activity或Service來實現它內部定義的函式,為了達到此一目的,它建立一個Stub的抽象類別,該類別是擴充作業系統內的Binder類別並實現在AIDL定義的介面。

2010年5月12日 星期三

利用AIDL實作遠端服務之步驟


1. 建立專案,建立RemoteServiceBinding的Activity類別,按下Finish鍵。


2. 建立IRemoteServiceCallback介面並宣告valueChanged兩個函式。


3. 建立IRemoteService介面並宣告registerCallback和unregisterCallback兩個函式。

4. 建立ISecondary介面並宣告getPid和basicTypes兩個函式。

5. 建立遠程RemoteService類別。

6. 在AndroidManifest.xml檔案中增加服務,記得在Process欄位上補上:remote。

7. 在RemoteServiceBinding.java程式中,宣告兩個按鈕及1個文字物件,並利用findViewById函式將這些物件和視域建立關係,利用setOnClickListener函式,來為按鈕安裝監聽按鈕的事件之監聽器。

8. 實作ServiceConnection內的函式。

9. 在RemoteService類別中增加IRemoteService.Stub物件,並將該物件當成onBind函式的傳回值。

10. 此時執行後再下Start Service按鈕如標題欄如顯示Binding則表示成功。

11. 在RemoteService.java下,實作registerCallback和unregisterCallback兩個函式,並宣告RemoteCallbackList mCallbacks物件,來儲存註冊的資訊。

12. 在RemoteService.java下,實作1個handler來定期處理事情,呼叫valueChanged函式來改變Activity上的畫面。

13. 在RemoteServiceBinding.java下,實作valueChanged函式,並將收到的值顯示在畫面上。

2010年5月11日 星期二

USB設備及電腦監控整合設計

USB設備上的控制軟體大多使用C語言來設計,一般可使用Keil C IDE軟體來開發,電腦端的控制軟體則可以使用C++或VB,本文說明利用VB來設計,其軟體可由http://www.lvr.com/hidpage.htm網站中取得,我們以usbhidio2(Viusal Basic)為例,至於USB設備上的控制軟體可到長高網站或冾長高科技。以下介紹幾個重要的部份:
1. 修改VID及PID,此部份可以修改VB或Keil C,只要兩邊一致即可。
例如:修改dscr.a51(粗體是修改的部份)
DeviceDscr: db deviceDscrEnd-DeviceDscr ;; Descriptor length
db DSCR_DEVICE ;; Decriptor type
db 10H, 01H ;; Specification Version (BCD)
db 00H ;; Device class
db 00H ;; Device sub-class
db 00H ;; Device sub-sub-class
db 64 ;; Maximum packet size
db 25H, 9H ;; Vendor ID ;;************************
db 99H, 12H ;; Product ID ;;************************
dw 0001H ;; Product version ID
db 1 ;; Manufacturer string index
db 2 ;; Product string index
db 0 ;; Serial number string index
db 1 ;; Numder of configurations
deviceDscrEnd:

2. 讓USB設備起動時能用燈號來顯示(修改periph.c中TD_Init())
該函式只執行一次。
void TD_Init(void) // Called once at startup
{
int i,j;
PORTACFG = 0x00;
OEA = 0xFF;

PORTBCFG = 0x00;
OEB = 0xFF;

OED = 0xFF;
P0=0;
for(i=0; i<1000; i++)
for(j=0; j<1000; j++);
P0=0xff;
for(i=0; i<1000; i++)
for(j=0; j<1000; j++);
P0=0;

IN07VAL |= bmEP2 ;
OUT07VAL |= bmEP2;

OUT07IEN |= bmEP2;

IN07IEN |= bmEP2;

//HID code end

suspCount = 1;

OEA = 0xFF;

Rwuen = TRUE; // Enable remote-wakeup
}
3. 讓USB設備上的燈號持續顯示,可以修改TD_Poll函式,宣告一個全域變數cnt並在TD_Init()上初始化。
int cnt;
void TD_Init(void) // Called once at startup
{
int i,j;
PORTACFG = 0x00;
OEA = 0xFF;

PORTBCFG = 0x00;
OEB = 0xFF;

OED = 0xFF;
P0=0;
for(i=0; i<1000; i++)
for(j=0; j<1000; j++);
P0=0xff;
for(i=0; i<1000; i++)
for(j=0; j<1000; j++);
P0=0;
cnt=0;
IN07VAL |= bmEP2 ;
OUT07VAL |= bmEP2;

OUT07IEN |= bmEP2;

IN07IEN |= bmEP2;

//HID code end

suspCount = 1;

OEA = 0xFF;

Rwuen = TRUE; // Enable remote-wakeup
}
void TD_Poll(void) // Called repeatedly while the device is idle
{
cnt++;
if(cnt>10000)
{
P0=1-P0;
cnt=0;
}
}
4. 能由電腦來控制故要修改ISR_Ep2out(),利用該函式來控制flag全域變數,對TD_Poll()函式進行控制。
int cnt;
int flag;
void TD_Init(void) // Called once at startup
{
int i,j;
PORTACFG = 0x00;
OEA = 0xFF;

PORTBCFG = 0x00;
OEB = 0xFF;

OED = 0xFF;
P0=0;
for(i=0; i<1000; i++)
for(j=0; j<1000; j++);
P0=0xff;
for(i=0; i<1000; i++)
for(j=0; j<1000; j++);
P0=0;
cnt=0;
flag=0; IN07VAL |= bmEP2 ;
OUT07VAL |= bmEP2;

OUT07IEN |= bmEP2;

IN07IEN |= bmEP2;

//HID code end

suspCount = 1;

OEA = 0xFF;

Rwuen = TRUE; // Enable remote-wakeup
}

void ISR_Ep2out(void) interrupt 0

{
int i;

if (EPIO[IN2BUF_ID].cntrl & bmEPBUSY)
{
TOGCTL = 0x08 | IN2BUF_ID;
WRITEDELAY();
if (TOGCTL & 0x80)
TOGCTL |= 0x20;
else
TOGCTL |= 0x40;
}


for (i=0; i < OUT2BC; i++)
{
flag=OUT2BUF[0];
// P0=OUT2BUF[0];
// P1=OUT2BUF[1]; //-------------------------------------------------
// P3=OUT2BUF[2];


}


OUT2BC = 0;


EZUSB_IRQ_CLEAR();
OUT07IRQ = bmEP2;
}
5. 最後修改VB控制程式,增加兩個按鈕程式
Private Sub Command1_Click()
If MyDeviceDetected = False Then
MyDeviceDetected = FindTheHid

End If

If MyDeviceDetected = True Then


OutputReportData(0) = 0
'Write a report to the device

Call WriteReport
Call WriteReport

'Read a report from the device.

Call ReadReport
End If

End Sub

Private Sub Command2_Click()
If MyDeviceDetected = False Then
MyDeviceDetected = FindTheHid

End If

If MyDeviceDetected = True Then


OutputReportData(0) = 1
'Write a report to the device

Call WriteReport
Call WriteReport


'Read a report from the device.

Call ReadReport
End If

End Sub

如何在Android上寫出一個Widget

老師、同學大家好:
最近實做了一下Widget,今天來分享如何在Android上寫出一個Widget。

利用代理人技術來協助進行簡報

上個月我們介紹如何利用代理人技術來打造會說話且有動畫效果的網頁,MASH也可用設計具有代理人能力的簡報,由於MS Agent具有很不錯的動畫效果,可以為您的簡報加分,另外它也可以代替您陳述簡報內容,最強的是它精通各國語言,對於不熟悉用英文簡報人來說是很好的工具,以下是它的設計步驟:

1. 利用Powerpoint製作簡報,儲存簡報。

2. 在MASH上選擇Powerpoint選項,並輸入簡報檔案名稱。

3. 編輯代理人腳本,記得要加上'#'符號表示換頁。

4. 選擇Script Output存成執行檔。

5. 執行該執行檔,進行簡報。

2010年5月9日 星期日

[活動資訊]Android 系統元件探討 (5/22 下午場)

介紹有關Android元件的演講,地點是在逢甲哦,有興趣的可以去下面的網址報名~~~
主題
Android 系統元件探討 (不含 Android 應用程式開發)

大綱
- 拆解 Android 架構:專注於系統層面
- 特化的 Dalvik VM
- 系統元件:SurfaceFlinger, PixelFlinger, libagl, AudioFlinger
- 跟想像有些落差的 Android HAL

議程簡介
儘管 Android 是相當火紅的專案,市面上有大量的書籍與資料探索 Android 應用程式開發,但鮮少有專文探討 Android
系統中若干經典的軟體元件,如 Dalvik VM, SurfaceFlinger, PixelFlinger, libagl,
AudioFlinger, HAL 等項目,往往得在原始程式碼中探險許久,才會有些端倪。講者有幸能在系統層面耕耘一段時日,於是想藉由
Study Area 的場合,將這些系統元件作一簡要探索,希望能對有心移植 Android 或改良整體功能與效能的朋友,能有所助益。

建議聽者背景 (任一)
(1) 已熟悉 C/C++/Java 語言程式設計者
(2) 對 Android 系統移植有興趣者
問題的熱血人士

注意事項
(1) 本議程僅探索 Android 系統層面的元件,不探討 Android 應用程式開發
(2) 免費分享的初衷是引導更多熱心的朋友投入 ARM/Embedded 系統開發,礙於時間與資源的限制,無法確保每處技術細節皆正確,但相當歡迎討論交流

時間
2010 年 05 月 22 日 (星期六)
下午 02:00 ~ 05:00
時間規劃: 3 hr

講師簡介
Jim Huang (黃敬群),慣用網路暱稱為 "jserv",熱血工讀生。自 1999 年開始參與自由由軟體開發,於 2005 年起提供以自由軟體為基礎的技術資訊服務,涉及手機、GPS 導航、數位電視、電子廣告系統、機器人等嵌入式系統設計。
基於對電腦技術與自由軟體的熱愛,於 2009 年共同創立 0xlab,期許能以團隊的優勢提供完整戰力,為軟體界做出些許貢獻。
web: http://jserv.sayya.org/
blog: http://blog.linux.org.tw/jserv/
0xlab: http://0xlab.org/

地點
逢甲大學 校本部 資訊電機館 102 教室(資電館正門進來右轉靠右第2間教室)

[ 交通資訊 | 校內地圖 ]

建議由逢大路側(東門)前往活動地點

費用
free!

活動報名網址
http://www.study-area.org/samc/registry/add/44

2010年5月8日 星期六

[轉貼]Tricorder - 手機感測器監視軟體

Market有一個Sensor的監視軟體,可以秀出手機上Sensor的資料,大家有興趣可以裝來玩看看.....
原文來源 : 台灣Android資訊站 Author: jonywalk
  • 類型:工具
  • 費用:免費
  • 測試版本:5.6
  • 測試機型:HTC G1 CyanogenMod-4.2.15.1

market://search?q=pname:org.hermit.tricorder

像Android這樣新一代的智慧型手機比較不一樣的地方是:內建多種感測器,所以才能達成更多類型的應用。Tricorder就是用來監控這些感測器,將各種數據圖形化。上圖是重力偵測,顯示水平儀及加速器的改變。

這是「磁通量」的感應,只要接近導磁的金屬,就會產生數值變化。

聲波分析:隨著麥克風接受的聲音大小作波形、頻率以及強度變化。

地理資訊:通過GPS顯示所在位置的經緯度、高度及方向、速度,以及電子羅盤的方位。

電磁波譜:主要監控GSM/3G的基地台(無線電波)以及Wi-Fi(低強度微波)的訊號強度。

太陽活動:從伺服器上下載太陽黑子、原子與電子等的活動數據。

設定畫面:可以設定各種感測器的細部功能。

幫助畫面中對每個項目都有詳細的說明。

其實這個程式對一般人來說,可能只是有趣地瞭解一下手機的感測器;不過也許對於開發者來說,尤其需要用到相關感測器功能的時候,Tricorder就能提供相當好的資訊了。

健身車結合電視遊戲 運動像打電動

2010年5月7日 星期五

利用Blender來設計Android OpenGL物件模型

1. 到Android OpenGL教學網站下載程式,並解壓縮。

2. 在eclipse中選擇Import選項,把下載到的檔案滙入,如右圖。

3. 執行結果

4. 查看原始程式,注意看vertices和indices兩個陣列值。

5. 利用Blender將繪製的立方體模型輸出成Wavefront(*.obj)檔案

6. 利用記事本將滙出的檔案打開


7. 修改上述的兩個陣列檔

public void onDrawFrame(GL10 gl) {
// Clears the screen and depth buffer.
gl.glClear(GL10.GL_COLOR_BUFFER_BIT GL10.GL_DEPTH_BUFFER_BIT);
// Replace the current matrix with the identity matrix
gl.glLoadIdentity();
// Translates 4 units into the screen.
gl.glTranslatef(0, 0, -4);
gl.glRotatef(30, 1, 0, 0);
gl.glRotatef(30, 0, 1, 0);
gl.glScalef(0.5f, 0.5f, 0.5f);
// Draw our square.
square.draw(gl);
}

8. 修改程式並執行

婚姻帳單

無論你是妻子還是丈夫,都希望您能很用心地看看這個"讓男人驚心的感情帳單 "。

14年前那個風雨交加的夜晚,我眾叛親離,跟著深愛的你到深圳做了打工妹。

貧窮的你落榜後除了生病的母親、衰弱的父親和那半間破瓦屋,就剩下我了。

記得當初來深圳打工的路費用的也是我做一個月民辦老師的工資。我所受的苦

都是為了今生能與你長相守。

或許,我的眼光不錯,你是很棒的。

10年後的今天,當我家所有的人鬆了一口氣,原諒我沒嫁錯郎的時候,有了

車、有了別墅的你卻在直言不諱地對我說,你找到了"心靈知音",如果我願意

解除婚姻的話,財產、孩子都給我;否則你背叛我,我不能有怨言。

我笑了,說3天後給你答覆。

3天後,我開列了一張婚姻的清單給你過目:

1、婚姻10年,你穿舊了 3套睡衣,穿壞了4雙拖鞋,踏破了21雙皮鞋。破的皮

鞋最多,因為你在外面掙錢所花的時間多,所以會有"心靈知音"看上成功的你。

2、婚姻 10年,我穿舊了10套睡衣、著爛了11 雙拖鞋、踏壞了16雙皮鞋。我破

的拖鞋和皮鞋都多,是因為我照顧家和孩子的時間比你多,出外面和你並肩戰

鬥的時間也不少,因此操勞的我成了沒有新鮮感的" 黃臉婆"。

3、婚姻10年,常青樹的你升值X倍,離婚後,從深圳排到杭州那麼多的美女等

著"成功人士、成熟有品位" 的你挑選。

4、婚姻10年,青春快逝的我貶值了10000倍;實話實說,離婚了我再婚的機會

是1%,年老的我看不上和我年齡相近的男人,而除非太差,一般的男人是不願

意娶一個帶著孩子的中年女人的。

5 、婚姻10年,繁忙的你只燒過 26次飯給我吃。

6 、婚姻10年,忙碌的我一年 365天,日日三餐,做好飯給你吃。

7 、婚姻10年,生一個孩子,我用了10 個月,養、育、教了10年。

8 、婚姻10年,生一個孩子,你用了 10 分鐘,給了他一個姓。

9 、婚姻 10 年,我和你父母和睦相處,沒有一句高聲的話語。

10、婚姻10年,你一直不肯原諒愛女心切的我的父母,沒有叫過一聲爸爸媽

媽。貧窮時你說我爸爸媽媽不會應答你,你堅決不肯叫;有錢後說不再怕他們

了而不叫。難道你願意自己的女兒在能夠選擇的時候去選擇貧窮嗎?希望女兒

富足,這是人之常情呀!

親愛的,如果你看了上面的婚姻總結,能夠用眼睛看著我說離婚的話,我成全

你的心願。你什麼時間跟我提,我都可以,我答應和你離婚。

只是,我等了你一年,你都沒有再提離婚這件事。

變得早回家、勤炒菜、會拖地,你不是將功贖罪吧?

或許,因為,有良心的人居多,所以這世界上還是房子比監獄多。

2010年5月4日 星期二

用代理人設計銀髮族網頁 第五組學生作品


兩不同Activity間的資料傳遞

老師,同學大家好:
今天來貼一篇關於兩不同Activity間的資料傳遞,

Scenario :
第一個Activity詢問您所就讀的學校,按下確定的Button後會將值傳到第二個Activity,
在第二個Activity按下回上一頁的Button後會將值傳回到第一個Activity。