iOS 裝置和外部配件的通訊

2021-06-18 07:21:02 字數 2755 閱讀 3828

首先,如果我們的應用程式想跟外設傳輸資料,先要透過iphone的作業系統,也就是iphoneos,而最開始的認證過程也是在外設和iphoneos之間發生的,蘋果為這個過程提供了一顆認證晶元(這顆晶元的作用是用來讓iphoneos識別這個外設是經過蘋果公司承認的,他的通訊方式是i2c匯流排,而且每齣乙個產品蘋果都會收幾美元的認證費用,蘋果用心何其毒也~~~)

iphoneos承認外設分兩個步驟,識別和認證,我們先說說識別過程。

識別過程是使用純物理連線來實現的,在這個過程中iphone的30pin有三個引腳被用到,分別是accessory identify,accessory detect,accessory power,accessory identify接549k歐姆的電阻,告知iphoneos使用串列埠通訊,accessory detect直接接地,告知iphoneos有外設插入,accessory power相當於iphoneos的訊號,待機時這個引腳沒有輸出,否則會有3.3v的電壓輸出。如果按照以上連線就完成了識別過程。

下面開始認證過程,認證過程也叫idps過程,這些就牽扯到蘋果指定的通訊協議了,蘋果給自己的通訊協議起了乙個名字叫lingo,lingo分好多種有音訊的lingo還有顯示遙控的lingo,而我們認證使用的lingo叫做general lingo。可能大家這時有點暈,那我就給大家看乙個iphone的命令包。

startidps packet

byte     value    comment

0            0xff    sync byte(required only for uart serial)

1            0x55    start of packet(sop)

2            0xnn    length of packet payload

3            0x00    general lingo

4            0x38    startidps

5            0xnn    transid [bit 15:8] transaction id 

6            0xnn    transid [bit 7:0]

7            0xnn    校驗

這是iphone的命令包,大家看到這個應該就明白了。開始idps過程首先要傳送startidps命令,這樣,外設與iphoneos之間的認證過程就開始了。其中咱們應用中eaaccessory關於一些外設的屬性,都是在這個過程中外設發給作業系統的,具體還是大家加入蘋果的mfi(made for ipod),拿到資料後,才能更明白。稍後我會將iphone串列埠通訊的原始碼發出來。

(externalaccessory.framework)提供了一種管道機制,使應用程式可以和iphone或ipod touch裝置的配件進行通訊。通過這種管道,應用程式開發者可以將配件級別的功能整合到自己的程式中。

**上找到相應的資訊。 。

在和配件進行通訊之前,需要與配件的製造商緊密合作,理解配件提供的服務。製造商必須在配件的硬體中加入顯式的支援,才能和iphone os進行通訊。作為這種支援的一部分,配件必須支援至少一種命令協議,也就是支援一種定製的通訊模式,使配件和應用程式之間可以進行資料傳輸。蘋果並不維護乙個協議的登錄檔,支援何種協議及是否使用其他製造商支援的定製或標準協議是由製造商自行決定的。

物件,可以和配件進行通訊。通過這些流物件,應用程式可以向配件傳送未經加工的資料報,以及接收來自配件的類似資料報。因此,您必須按照期望的協議來理解每個資料報的格式。

,用於標識應用程式支援的通訊協議。您的應用程式可以在這個列表中以任意順序包含任意數量的協議。系統並不使用這個列表來確定應用程式應該選擇哪個協議,而只是用它來確定應用程式是否能夠和相應的配件進行通訊。您的**需要在開始和配件進行對話時選擇適當的通訊協議。

在配件接入系統並做好通訊準備之前,通過external accessory框架無法看到配件。當配件變為可見時,您的應用程式就可以獲取相應的配件物件,然後用其支援的一或多個協議開啟會話。

物件中的絕大多數資訊(比如名稱、製造商、和型號資訊)都只是用於顯示。如果您要確定應用程式是否可以連線乙個配件,必須看配件的協議,確認應用程式是否支援其中的某個協議。

請注意:多個配件物件支援同一協議是可能的。如果發生這種情況,您的**必須負責選擇使用哪個配件物件。

,字典的鍵是配件支援的協議。如果您試圖用乙個已經在使用的協議建立會話,external accessory框架就會產生錯誤。

程式清單8-1展示了如何檢查接入配件的列表並從中取得應用程式支援的第乙個配件。它為指定的協議建立乙個會話,並對會話的輸入和輸出流進行配置。在這個方法返回會話物件時,已經完成和配件的連線,並可以開始傳送和接收資料了。

程式清單8-1建立和配件的通訊會話

- (easession *)opensessionforprotocol:(nsstring *)protocolstring }

if (accessory) }

return session; }

程式清單8-2處理流事件

// handle communications from the streams.

- (void)stream:(nsstream*)thestream handleevent:(nsstreamevent)streamevent }

來註冊接收這些通告。兩種通告都包含受影響的配件的資訊。

的可選方法,您可以通過這個方法來接收配件斷開通告,而不需要事先配置通告觀察者。 。

iOS 裝置與其配件間的通訊

與擴充套件配件通訊,需要你同配件廠商通力合作,並理解其配件所提供的服務。而廠商必須精準的支援其硬體裝置同ios之間的通訊。作為支援的一部分,其配件必須支援至少一種命令列協議,該協議用於配件與其相配套的應用之間進行資料的傳輸,並且廠家可以自定義該協議,或者使用其他廠商支援的標準協議,而蘋果公司並不註冊...

製冷裝置冷水機的組成配件

製冷裝置冷水機 的組成配件 製冷系統中的工業冷水機,冷風機,冷油機等,主要部件有壓縮機 冷凝器 蒸發器 膨脹閥 或毛細管 過冷卻控制閥 四通閥 複式閥 單向閥 電磁閥 壓力開關 熔塞 輸出壓力調節閥 壓力控制器 貯液罐 熱交換器 集熱器 過濾器 乾燥器 自動開閉器 截止閥 注液塞以及其它部件組成。電...

uniapp和iOS的通訊

前端呼叫ios原生方法 window.webkit.messagehandlers.原生方法名.postmessage 給原生傳遞的引數 需要返回值的話,ios會呼叫前端的乙個方法,並以引數的形式返回 例如 ios呼叫的方法 iosreturnuserinfo obj 如果想讓原生呼叫這個方法,最重...