這幾天才把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。
2月 03, 2010
訂閱:
張貼留言 (Atom)
41 則留言:
老實說看的霧煞煞,這是你的個人修業嗎?
不算吧 沒遇到困難的時候還滿好玩的 :p
我男朋友也寫這些東西耶~~他是寫android的,你有空可不可以陪他討論一下阿 我覺得你一定很厲害
都可以啦 不過我都是亂摸的 :p
請問你用的iPhone是要jailbreak的嗎? 我以為要使用External Accessory framework來連接自己做的accessory需要註冊made for iPhone耶? 最近也在搞這個東西...
Hi Justin,
accessory那邊的程式的確是需要加入made for iPod才能看到相關的文件。而iPhone那邊的app我是也有加入ADC才能測試這app跟accessory的溝通是否正確,主要是因為要拿到bundleID。用jb的方式好像也行,不過我有用adc所以這邊就沒特別去研究了哩 :)
Hi,我也正在开发基于iPhone 3.0 UART的配件,可以交流一下除了需要iPhone SDK那些命令么?感激万分!
您好,最近在研究external accessory framework。必须加入到MFI吗?
可是没有找到什么好的例子,能否给点意见呢?
Hi Eric,
在iPhone SDK中主要是使用external accessory framework這個framework做開發的 記得在ADC中也有份文件(不過我有點忘了)在講解如何以external accessory framework進行開發。
Hi Takujin,
如果只是單純使用external accessory framework,並不需要加入MFi。但是external accessory framework通常不能單獨使用,因為沒有對應利用iAP開發的accessory接在iPhone/iPod 30pins connector上的話,也看不出external accessory framework是否能夠順利運作。
你好
請問有能增測從30pin line in的audio的api嗎
找好久都找不到
Hi Shinren,
在iPhone SDK這塊,我不是很熟悉。歹勢,可能比較沒辨幫到你。
請問你有加入MFi program?加入需要具備什麼資格?加入能取得那些資料?
Hi Mark,
如果是要implement iAP的話,一定得加入MFi,如此才能夠拿到相關的文件去實做。加入MFi,主要是為了取得iAP的specificaiton,如此才能實做iAP。至於要如何加入這點我不是很清楚,因為主要是我前公司的人去負責這部份的接洽。基本上你可以看一下這個鏈結,裡頭有相關的資訊。http://developer.apple.com/programs/mfi/
希望有幫到你 :)
感謝你的回答,再問幾個觀念問題,若PC僅透過USB cable連接iPhone, pc可以模擬成Accessory嗎?iAP over USB 和iAP over Bluetooth都需要authentication CP ?
Hi Mark,
其實應該是說看你要用到那個command,不過似乎都要做到authentification,才能做到一些比較基本的動作。所以簡單的來說不管是透過那個interface,應該都需要用到apple的那個CP。另外,你提出來的這個idea,我之前是沒這樣想過,不過iPhone/iPod要認到accessory,是靠著30 pin connector上的一隻腳接的電阻來判斷accessory是啥裝置,而且也同時需要其它腳位的電位高低來讓iPhone/iPod做一些相關的判斷,如此才能故identification跟authentification。所以要用USB接電腦來模擬的話,是可行的,不過30pin connector其它一些腳位也要用相對應的電路做同步的控制才行,這點比較麻煩。
不好意思請問一下!
”iAP開發的accessory”是指什麼?
如果先不談認證問題
用USB介面傳輸,那accessory不是只要支援USB收發功能就可以?
哈囉 帥儀你好,
看到你的問題,才發現沒解釋的很好。iAP是iPhone/iPod周邊跟iPhone/iPod溝通用的protocol。透過iAP,iPhone的軟體可以跟此週邊做溝通,進而達到用軟體控制週邊的作用。因此有實作iAP的accessory連上iPhone/iPod後,就可以讓iPhone控制。而這個protocol的command可以透過USB、UART、Bluetooth來傳遞。因為USB跟UART本來就包在iPhone/iPod的30 pin cable上,所以command可以直接透過這兩個介面傳遞,另藍芽記得沒錯的話,則要先經過藍芽配對、連線的步驟後,再用spp的方式來做指令的交換,這部份因為後來沒時間在前公司實作,所以就沒那麼清楚。希望有回答到你的問題 :)
萬分感謝你的熱心回應!
因為我想做的是,和外部做USB資料通訊,並不需要利用軟體控制周邊設備,只要能和外部
設備收發USB訊號即可!
我目前手邊關於這方面的資料都是Apple官方的文件,
例如:External Accessory Framework Reference、External Accessory Programming Topics......等等
看完後,大概也只有一些基礎的觀念,對於要寫出收發USB訊號的APP還很遙遠!
目前不知道該如何是好!不知道您可以給我一點意見嗎?或是提供一些相關的資訊給我!
PS.目前還未加入MFI!
帥儀你好,
你對External Accessory Framework的使用上有點錯誤喔 它這個framework雖然可以去access USB,但是也要有有implement iAP over USB的accessory有插上iPhone,你才能在用External Accessory Framework看到那台accessory,然後iPhone的程式才能用USB對這台accessory做讀寫。並不是用了External Accessory Framework就可以對USB做讀寫。相信你在External Accessory Programming Topics也有看到它需要先去device pool裡頭撈到某台device才行,為啥撈得到哩,就是這台device有接上iPhone且它有通過iAP的identification/authentification才會出現在device pool裡頭
感謝你的耐心糾正! 不勝感激!
我有找到iphone的開發板所以accessory這部分不用擔心implement iAP over USB的問題
這個開發板必須要加入MFI才可購買,可是查了MFI計畫才發現,MFI好像是給公司申請的!
30pins connector要加入MFI才有控制接腳的相關技術文件對吧?!
因為我只是研究用不像公司是要開發產品,所以MFI計畫應該是無法申請成功。
如果MFI計畫沒辦法申請就意味著我沒辦法去使用30pins connector傳輸資料?!
這樣我就只剩下無線傳輸(WiFi、藍芽)可以選擇?!
不知道我這樣想對嗎?還是說要用無線傳輸也需要加入Apple的某個會員之類的?
不好意思,一直打擾你!
哈囉 帥儀,
不加入MFi的話 什麼資料都拿不到 其它的傳輸方式也沒辨法 當初公司在申請的時候我沒參與 不大清楚是怎樣的方式。但我認為你還是先去丟丟看application 搞不好就申請過了 這樣研究起來也方便
OK!我會去申請看看!非常感謝你的幫忙!謝謝!!!
Hi,版主你好:
最近在研究Apple的Accessory,突然剛看到你的部落格,有一些問題想請教
1. 申請加入MFi需要付費嗎? 怎麼收費?
2. 與iProdcuct(iPod, iPhone, iPad, etc)溝通的那顆AC,它是什麼系列的MCU?有特定要跟Apple買嗎?
3. 只要有iAP的規格,就能實作與iProduct的溝通嗎? 還是一定套用某SDK?或是某library?
Hi,
1. 申請跟付費我就不清楚了 歹勢 XD
2. 那顆IC只能跟apple買,只有它有出 XD
3. 只要有spec. 就可以實作出iAP。但你得加入Mfi才拿得到spec。因為要拿到spec有簽NDA,所以跟別人也拿不到。之前有跟Microchip的人聊過,他們家已經有SDK。TI的話那時候還沒有(那時候是2009年底),現在不知道。我那時候是用TI的MSP430實作的。
Hi.. 您好
我是在一家公司專門負責申請MFi的人,
我們公司想要做iphone上面可以看電視,可是遲遲找不出方法,請問您有沒有任何的idea? 電視的內容目前是設定在CMMB。
目前MFi申請通過。
Allen您好,
小弟網上查資料剛好看到您也有開發過Apple Accessory Authentication的經驗
小弟目前也剛嘗試作這方面的東西
現在遇到問題,不知道方不方便跟您請教一下
目前我們公司也有跟Apple買了貴三三的CP chip
我現在的StartIDPS到EndIDPS的流程都跑完了
現在開始要跟CP拿Accessory Certificate Data透過RetDevAuthenticationInfo 這組command回報給iPhone,但是這邊出了問題
1: 我從CP的0x30讀回Certificate的資料長度是0x03B1, 我就從0x31的位置一次讀0x03B1的長度資料,我發現裡面只有前面17byte有資料後面東是0x00,
2: 我常是把這些資料分段丟回iPhone, 依照spec他說每丟一個section,要等iPhone回ACK才能繼續丟下一個sction, 可是我等半天也沒看到Ack...Orz...反而是iPhone一直跟我下GetAuthenticationInfo幾次後直接回AckDevAuthenticationInfo說認證失敗
我在這卡了好久T__T
更正一下我的問題XD
現在看起來CP回我的Accessory Certificate Data都好了
但是因為Data超過500bytes
所以要切section
請問這邊再回RetDevAuthenticationInfo的時候可以用small packet format的command格式回iPhone, 還是說要用Large packet format,
另外就是只要單筆不大於500bytes就好,是說我要200切一個section也行嗎?
Hello James,
不好意思 那麼久才回你信 搞不好你也找出方法了。我的想法是ext. device可以是衛星訊號的接收器,頭裡也做好Decoder。我記得30pins connector中有audio跟video的訊號線。透過iAP做好identification跟authentification後,iPod/iPhone就可以吃進av訊號了。
Googlegood你好,回得有點慢。可能你已經解決了。你應該也試過了,其實只要不超過500bytes就行了。
版主別這麼說
感謝您抽空留言
目前這部分確實解決了
奇怪的是我是照著Spec
但是RetDevAuthentication的packet format裡面沒有Trans ID的欄位
所以我回傳的format也沒加
後來我自行添加兩個TransID欄位上去就解決
真是神奇,是Spec錯還是我漏看了什麼O_o
不過我現在是拿到iPhone傳來的GetDevAuthenticationSignature
也拿到了20bytes的challenge data
我現在把Challenge Length (00 14)寫到CP的0x20位置
再把iPhone給的challenge data寫到 CP的0x21位置
接著在0x10的位置寫入0x01讓CP開始產生Signature data
但是我一直去讀0x10一直沒有得到完成的狀態
不知道版主有沒有什麼建議
另外版主有另外的聯絡方式可以讓小弟跟您連絡嗎^^"
Dear AllenC
先謝謝你, 你的分享相當有用, 有個問題想請教你, 你在上面的討論有提到 "另藍芽記得沒錯的話,則要先經過藍芽配對、連線的步驟後,再用spp的方式來做指令的交換", 我目前在進行的專案有類似的需求,(在iphone上寫軟體經由藍芽介面送command給我們開發的藍芽模組)
想請問的是, 如果我的藍芽硬體上了apple AC也通過MFI, 但我在apple的網站上 http://support.apple.com/kb/ht3647, 看到他目前只支援 (HFP 1.5),(PBAP),(A2DP),(AVRCP),(PAN),(HID)六種profile,並無SPP. 而我這邊最需要的是SPP profile, 不知道是否即時通過了MFI, 在跟iphone連接的時候還是無法傳遞data. 或者說無法以可以傳遞data(SPP)的profile來連接.iphone,以及是否能用其他profile (如HID)的方式連接,然後再試著讓App送指令給藍芽模組 不知道你有沒有類似的經驗或了解.
版主你好, 我有找到一個solution完美的讓Iphone跟外部硬體作連結,現在市面上應用的還不多,不過應該會有越來越多相關的應用, 小弟不才, 遇到很多的困難. 不知是否可以當面詳談請益? 我人在台中. 有沒有聯繫方式呢? 我的信箱是lzn168@gmail.com
歐, 對了, 你照片穿的那件T shirt, 我也有一件.
googlegood你好,這麼久了 你的問題應該已經解決了。是啊沒錯,可以自已切section就可以了 XD
Bryan你好。我之前沒有做過這樣的implementation,不過就我所知CSR taiwan這邊是有這樣的solution,他們應該會有比較深入的了解。有需要的話我可以給你他們台灣這邊的FAE的聯絡方式。
swenson你好,這個已經是在前公司的東西了 XD 所以很多東西應該都還回去了,可以的話可以在這邊提問題,如果我還記得的話會盡力回覆的,謝謝
你好,我們也有些iAP的問題不知道方不方便和您用email來聯絡?
你好~~
方便和你用email聯絡嗎~~
我們也正在開發iap相關的產品
Dear allenC
Are you interested to take a part-time job?
I have a device to iphone case
http://case.518.com.tw/casepage-detail-9963.html
If you are interested at it
please contact with me
Thanks
Hi Tony and Elton,
I have no much time for this. Sorry. ><
不好意思~想請教您是否有開發IPHONE周邊accessory套件的公司聯絡人員相關資料嗎?
張貼留言