You may delay, but time will not.

Search this blog

載入中...

二月 03, 2010

iAP跟iPhone app的開發大小事

這幾天才把iAP (iPhone跟其accessory間的protoco)大致地搞定。也寫了個簡單的app在iPhone上,利用這個app可以控制跟iPhone連接的accessory的硬體。



這些動作在做demo的時候的確是滿簡單的。大概只花個一分鐘就可以demo完。不過卻花了我大概兩個月的時間去搞定iAP還有iPhone SDK的使用。但主要的時間是花在iAP這邊,因為手上沒有apple release的debug tool,所以中間封包傳遞時,每交換一次封包,我就得用人工的方式去確認寫的值及回傳的值是不是正確的。尤其中間iPhone在認證accessory時,accessory需要跟apple的認證晶片透過I2C溝通,取回認證碼,而這個認證碼的長度在幾百個byte甚至上千個byte時,這人工檢查實在是快搞死我 (哈 雖然這話是講給外行聽的 :p)。

在這開發的過程中,我已經儘量把iAP相關的code儘量寫得independent一點,希望在開發其它project時,可以直接拉過來做為library使用。但因為大部份時都花在驗證封包,所以有些地方還是很取巧沒考慮很週到,因此跟其它程式的關聯度個人是覺得還可以再低些。

再來是code size的問題,有幾個地方是有比較值得討論的地方。I2C的部份是用software完成的,所以這部份比較會增加到code size的大小。其它的部份是覺得對code size大小的幫助並不大。還有一個跟code size有關係的部份是,目前interrupt產生後,大部份的task都在interrupt中執行,如此不是一個很好的做法,但主要也是為了節省時間來賺取驗證封包的時間,也是不得不的法子。之後還是得改回loop execute的法子,雖然這會稍增加code size,但對系統來說仍是比較好的做法。可以目前8kb的code size快爆了,得先省一下。

接下來是iPhone app的部份。目前只用了很簡單的component來做demo之用。對於view及其controller還是覺得很霧裡看花。這裡是還可以改進的部份。這部份寫完真希望還有時間可以自已來寫個app。

16 Comments:

wiming 提到...

老實說看的霧煞煞,這是你的個人修業嗎?

allenC 提到...

不算吧 沒遇到困難的時候還滿好玩的 :p

林大寶 提到...

我男朋友也寫這些東西耶~~他是寫android的,你有空可不可以陪他討論一下阿 我覺得你一定很厲害

allenC 提到...

都可以啦 不過我都是亂摸的 :p

Justin.Huang 提到...

請問你用的iPhone是要jailbreak的嗎? 我以為要使用External Accessory framework來連接自己做的accessory需要註冊made for iPhone耶? 最近也在搞這個東西...

allenC 提到...

Hi Justin,
accessory那邊的程式的確是需要加入made for iPod才能看到相關的文件。而iPhone那邊的app我是也有加入ADC才能測試這app跟accessory的溝通是否正確,主要是因為要拿到bundleID。用jb的方式好像也行,不過我有用adc所以這邊就沒特別去研究了哩 :)

eric.libin@gmail.com 提到...

Hi,我也正在开发基于iPhone 3.0 UART的配件,可以交流一下除了需要iPhone SDK那些命令么?感激万分!

takujin 提到...

您好,最近在研究external accessory framework。必须加入到MFI吗?

可是没有找到什么好的例子,能否给点意见呢?

allenC 提到...

Hi Eric,

在iPhone SDK中主要是使用external accessory framework這個framework做開發的 記得在ADC中也有份文件(不過我有點忘了)在講解如何以external accessory framework進行開發。

allenC 提到...

Hi Takujin,
如果只是單純使用external accessory framework,並不需要加入MFi。但是external accessory framework通常不能單獨使用,因為沒有對應利用iAP開發的accessory接在iPhone/iPod 30pins connector上的話,也看不出external accessory framework是否能夠順利運作。

shinren 提到...

你好
請問有能增測從30pin line in的audio的api嗎
找好久都找不到

allenC 提到...

Hi Shinren,
在iPhone SDK這塊,我不是很熟悉。歹勢,可能比較沒辨幫到你。

MarkTsai 提到...

請問你有加入MFi program?加入需要具備什麼資格?加入能取得那些資料?

allenC 提到...

Hi Mark,

如果是要implement iAP的話,一定得加入MFi,如此才能夠拿到相關的文件去實做。加入MFi,主要是為了取得iAP的specificaiton,如此才能實做iAP。至於要如何加入這點我不是很清楚,因為主要是我前公司的人去負責這部份的接洽。基本上你可以看一下這個鏈結,裡頭有相關的資訊。http://developer.apple.com/programs/mfi/

希望有幫到你 :)

MarkTsai 提到...

感謝你的回答,再問幾個觀念問題,若PC僅透過USB cable連接iPhone, pc可以模擬成Accessory嗎?iAP over USB 和iAP over Bluetooth都需要authentication CP ?

allenC 提到...

Hi Mark,

其實應該是說看你要用到那個command,不過似乎都要做到authentification,才能做到一些比較基本的動作。所以簡單的來說不管是透過那個interface,應該都需要用到apple的那個CP。另外,你提出來的這個idea,我之前是沒這樣想過,不過iPhone/iPod要認到accessory,是靠著30 pin connector上的一隻腳接的電阻來判斷accessory是啥裝置,而且也同時需要其它腳位的電位高低來讓iPhone/iPod做一些相關的判斷,如此才能故identification跟authentification。所以要用USB接電腦來模擬的話,是可行的,不過30pin connector其它一些腳位也要用相對應的電路做同步的控制才行,這點比較麻煩。