青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

路漫漫,長修遠,我們不能沒有錢
隨筆 - 173, 文章 - 0, 評論 - 257, 引用 - 0
數據加載中……

關于iphone accessory的理解

轉載自cocoachina http://www.cocoachina.com

首先,如果我們的應用程序想跟外設傳輸數據,先要透過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串口通信的源碼發出來。

MFI地址:http://developer.apple.com/programs/mfi/



以下部分轉載自<iphone應用編程指南>

和配件進行通訊

在iPhone OS 3.0及之后的系統上,External Accessory框架(ExternalAccessory.framework)提供了一種管道機制,使應用程序可以和iPhone或iPod touch設備的配件進行通訊。通過這種管道,應用程序開發者可以將配件級別的功能集成到自己的程序中。

請注意:下面部分將向您展示iPhone應用程序如何連接配件。如果您有興趣成為iPhone或iPod touch配件的開發者,可以在http://developer.apple.com網站上找到相應的信息。

為了使用External Accessory框架的接口,您必須將ExternalAccessory.framework加入到Xcode工程,并連接到相應的目標中。此外,還需要在相應的源代碼文件的頂部包含一個#import <ExternalAccessory/ExternalAccessory.h>語句,才能訪問該框架的類和頭文件。有關如何為工程添加框架的更多信息,請參見Xcode工程管理指南中的工程中的文件部分;有關External Accessory框架中類的一般信息,請參見External Accessory框架參考


配件的基礎

在和配件進行通訊之前,需要與配件的制造商緊密合作,理解配件提供的服務。制造商必須在配件的硬件中加入顯式的支持,才能和iPhone OS進行通訊。作為這種支持的一部分,配件必須支持至少一種命令協議,也就是支持一種定制的通訊模式,使配件和應用程序之間可以進行數據傳輸。蘋果并不維護一個協議的注冊表,支持何種協議及是否使用其他制造商支持的定制或標準協議是由制造商自行決定的。

作為和配件制造商通訊的一部分,您必須找出給定的配件支持什么協議。為了避免名字空間發生沖突,協議的名稱由反向的DNS字符串來指定,形式是com.apple.myProtocol。這使得每個配件制造商都可以根據自己的需要定義協議,以支持不同的配件產品線。

應用程序通過打開一個使用指定協議的會話來和配件進行通訊。打開會話的方法是創建一個EASession類的實例,該類中包含NSInputStreamNSOutputStream對象,可以和配件進行通訊。通過這些流對象,應用程序可以向配件發送未經加工的數據包,以及接收來自配件的類似數據包。因此,您必須按照期望的協議來理解每個數據包的格式。

聲明應用程序支持的協議

能夠和配件通訊的應用程序應該在其Info.plist文件中聲明支持的協議,使系統知道在相應的配件接入時,該應用程序可以被啟動。如果當前沒有應用程序可以支持接入的配件,系統可以選擇啟動App Store并指向支持該設備的應用程序。

為了聲明支持的協議,您必須在應用程序的Info.plist文件中包含UISupportedExternalAccessoryProtocols鍵。該鍵包含一個字符串數組,用于標識應用程序支持的通訊協議。您的應用程序可以在這個列表中以任意順序包含任意數量的協議。系統并不使用這個列表來確定應用程序應該選擇哪個協議,而只是用它來確定應用程序是否能夠和相應的配件進行通訊。您的代碼需要在開始和配件進行對話時選擇適當的通訊協議。

在運行時連接配件

在配件接入系統并做好通訊準備之前,通過External Accessory框架無法看到配件。當配件變為可見時,您的應用程序就可以獲取相應的配件對象,然后用其支持的一或多個協議打開會話。

共享的EAAccessoryManager對象為應用程序尋找與之通訊的配件提供主入口點。該類包含一個已經接入的配件對象的數組,您可以對其進行枚舉,看看是否存在應用程序支持的配件。EAAccessory對象中的絕大多數信息(比如名稱、制造商、和型號信息)都只是用于顯示。如果您要確定應用程序是否可以連接一個配件,必須看配件的協議,確認應用程序是否支持其中的某個協議。

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

對于給定的配件對象,每次只能有一個指定協議的會話。EAAccessory對象的protocolStrings屬性包含一個字典,字典的鍵是配件支持的協議。如果您試圖用一個已經在使用的協議創建會話,External Accessory框架就會產生錯誤。

程序清單8-1展示了如何檢查接入配件的列表并從中取得應用程序支持的第一個配件。它為指定的協議創建一個會話,并對會話的輸入和輸出流進行配置。在這個方法返回會話對象時,已經完成和配件的連接,并可以開始發送和接收數據了。


程序清單8-1  創建和配件的通訊會話

- (EASession *)openSessionForProtocol:(NSString *)protocolString{
    NSArray *accessories = [[EAAccessoryManager sharedAccessoryManager]
                                   connectedAccessories];
    EAAccessory *accessory = nil;
    EASession *session = nil;
 
    for (EAAccessory *obj in accessories) {
        if ([[obj protocolStrings] containsObject:protocolString]) {
            accessory = obj;
            break;
        }
    }
 
    if (accessory) {
        session = [[EASession alloc] initWithAccessory:accessory
                                 forProtocol:protocolString];
        if (session) {
            [[session inputStream] setDelegate:self];
            [[session inputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop]
                                     forMode:NSDefaultRunLoopMode];
            [[session inputStream] open];
            [[session outputStream] setDelegate:self];
            [[session outputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop]
                                     forMode:NSDefaultRunLoopMode];
            [[session outputStream] open];
            [session autorelease];
        }
    }
    return session;
}

 

在配置好輸入輸出流之后,最好一步就是處理和流相關的數據了。程序清單8-2展示了在委托方法中處理流事件的基本代碼結構。清單中的方法可以響應來自配件輸入輸出流的事件。當配件向應用程序發送數據時,事件發生表示有數據可供讀取;類似地,當配件準備好接收應用程序數據時,也通過事件來表示(當然,您并不一定要等到這個事件發生才向流寫出數據,應用程序也可以調用流的hasBytesAvailable方法來確認配件是否還能夠接收數據)。有關流及如何處理流事件的更多信息,請參見Cocoa流編程指南


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

// Handle communications from the streams.
- (void)stream:(NSStream*)theStream handleEvent:(NSStreamEvent)streamEvent{
    switch (streamEvent){
        case NSStreamHasBytesAvailable:
            // Process the incoming stream data.
            break;
 
        case NSStreamEventHasSpaceAvailable:
            // Send the next queued command.
            break;
 
        default:
            break;
    }
}

 

監控與配件有關的事件

當配件接入或斷開時,External Accessory框架都可以發送通告。但是這些通告并不自動發送,如果您的應用程序感興趣,必須調用EAAccessoryManager類的registerForLocalNotifications方法來顯式請求。當配件接入、認證、并準備好和應用程序進行交互時,框架可以發出一個EAAccessoryDidConnectNotification通告;而當配件斷開時,框架則可以發送一個EAAccessoryDidDisconnectNotification通告。您可以通過缺省的NSNotificationCenter來注冊接收這些通告。兩種通告都包含受影響的配件的信息。

除了通過缺省的通告中心接收通告之外,當前正在和配件進行交互的應用程序可以為相應的EAAccessory對象分配一個委托,使它在發生變化的時候得到通知。委托對象必須遵循EAAccessoryDelegate協議,該協議目前包含名為accessoryDidDisconnect:的可選方法,您可以通過這個方法來接收配件斷開通告,而不需要事先配置通告觀察者。

有關如何注冊接收通告的更多信息,請參見Cocoa通告編程主題



posted on 2011-10-09 14:47 Khan 閱讀(3529) 評論(0)  編輯 收藏 引用 所屬分類: GCC/G++跨平臺開發周邊技術

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线观看福利一区| 免费精品视频| 久久青草久久| 久久精品在线播放| 猛男gaygay欧美视频| 欧美在线国产| 久久久久久久久综合| 久久伊人亚洲| 欧美黄色网络| 亚洲免费福利视频| 亚洲一区二区不卡免费| 欧美成人免费一级人片100| 美女福利精品视频| 免费成人你懂的| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲视频欧美视频| 亚洲欧美一区二区视频| 久久av红桃一区二区小说| 久久亚洲精选| 欧美日韩成人激情| 国产乱码精品一区二区三区五月婷| 国产一区二区无遮挡| 亚洲乱码国产乱码精品精| 亚洲自拍偷拍网址| 欧美99在线视频观看| 99这里只有久久精品视频| 久久成人精品| 欧美日韩亚洲一区二区三区在线 | 一本色道久久综合亚洲精品按摩 | 久久精品91久久香蕉加勒比| 麻豆国产精品va在线观看不卡| 欧美激情91| 狠狠v欧美v日韩v亚洲ⅴ| 日韩天堂在线视频| 久久精品最新地址| 一本色道久久| 欧美 日韩 国产在线| 国产精品视频在线观看| 亚洲精品免费看| 久久九九电影| 日韩视频在线免费观看| 麻豆成人综合网| 国产偷国产偷精品高清尤物| 亚洲少妇自拍| 亚洲美女中出| 欧美www视频| 亚洲电影在线播放| 欧美中文字幕在线视频| 亚洲视频一起| 欧美日韩一区二区在线观看| 亚洲精品日韩在线| 欧美国产免费| 欧美成人免费全部| 亚洲全部视频| 亚洲成色777777在线观看影院| 亚洲一区不卡| 欧美日韩一区二区免费视频| 亚洲人成网站在线观看播放| 欧美成人a∨高清免费观看| 欧美一区二区视频免费观看| 亚洲国产精品综合| 亚洲一区二三| 欧美日韩亚洲综合| 亚洲国产精品v| 久久综合久久久久88| 香蕉视频成人在线观看| 欧美日韩亚洲三区| 在线一区免费观看| 一区二区三区毛片| 国产精品亚洲片夜色在线| 亚洲一区二区在线观看视频| 亚洲深爱激情| 国产日韩欧美精品综合| 久久国产日韩| 欧美一区二区视频网站| 国产日韩欧美| 久久综合九色| 蜜桃伊人久久| 9l国产精品久久久久麻豆| 99视频精品| 国产免费观看久久| 久色成人在线| 欧美高清在线精品一区| 宅男噜噜噜66国产日韩在线观看| 最新国产成人在线观看| 欧美激情在线观看| aa亚洲婷婷| 亚洲欧美色婷婷| 在线精品福利| 99成人精品| 国产欧美一区二区精品性| 久久亚洲国产精品一区二区| 久久亚洲私人国产精品va| 亚洲精品中文字| 一区二区三区色| 国内一区二区三区在线视频| 欧美激情精品久久久久久变态| 欧美日韩精品综合| 久久成人免费电影| 欧美mv日韩mv亚洲| 亚洲欧美国产va在线影院| 西西裸体人体做爰大胆久久久| 在线成人www免费观看视频| 亚洲人人精品| 狠狠综合久久av一区二区老牛| 欧美激情第1页| 国产精品综合久久久| 亚洲高清自拍| 国产人妖伪娘一区91| 亚洲激情网址| 狠狠入ady亚洲精品经典电影| 亚洲激情小视频| 国产主播一区二区| 一片黄亚洲嫩模| 91久久久在线| 欧美影院久久久| 亚洲欧美久久| 欧美激情一区在线| 欧美大学生性色视频| 国产区精品视频| 亚洲视频1区| 99re亚洲国产精品| 国产日韩av高清| 亚洲日本中文| 亚洲人人精品| 亚洲高清三级视频| 欧美中文字幕不卡| 欧美亚洲自偷自偷| 欧美日韩在线高清| 亚洲品质自拍| 亚洲精品在线视频观看| 久久人人精品| 久久成人18免费观看| 国产精品亚洲人在线观看| av成人手机在线| 亚洲美女毛片| 久久亚洲一区二区三区四区| 久久精品视频免费| 国产一区二区精品久久91| 亚洲午夜精品一区二区| 亚洲男人天堂2024| 国产精品av久久久久久麻豆网| aaa亚洲精品一二三区| 亚洲视屏在线播放| 国产精品成人一区二区三区吃奶| 亚洲精品在线观| 一区二区三区四区五区在线 | 欧美高清视频一区二区| 国产亚洲第一区| 久久精品视频播放| 欧美肥婆在线| 一区二区三区国产在线| 欧美日韩精品不卡| 9色国产精品| 欧美伊人久久| 国产自产2019最新不卡| 欧美中文字幕精品| 久热爱精品视频线路一| 亚洲激情在线观看| 欧美三级午夜理伦三级中文幕 | 黄色成人片子| 蜜臀av性久久久久蜜臀aⅴ| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲第一中文字幕在线观看| 美女精品自拍一二三四| 亚洲国产天堂久久综合网| 国产精品99久久久久久久女警 | 久久精品91久久久久久再现| 国模私拍视频一区| 欧美大片免费久久精品三p| 欧美激情一区二区三区全黄| 宅男精品导航| 亚洲二区视频| 国产精品网站在线播放| 欧美成人一区二区| 亚洲免费在线看| 亚洲电影免费| 久久精品国产欧美亚洲人人爽| 亚洲人成在线观看一区二区| 国产精品一区二区你懂的| 免费精品99久久国产综合精品| 亚洲一区二区三区中文字幕在线| 麻豆精品视频在线| 欧美一区二区成人6969| 国产一区二区三区直播精品电影 | 欧美成人免费网| 午夜精品久久久久久久| 亚洲黄色片网站| 国产在线精品成人一区二区三区 | 亚洲制服少妇| 亚洲盗摄视频| 久久久久久久精| 亚洲欧美日韩国产精品 | 国产精品视频久久一区| 欧美不卡高清| 欧美在线电影| 亚洲桃花岛网站| 亚洲欧洲另类国产综合| 亚洲无线一线二线三线区别av| 亚洲福利视频一区|