关于iphone accessory的理解

首先,如果我们的应用程序想跟外设传输数据,先要透过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 packetByte ValueComment00XFFSync byte(required only for UART serial)10X55Start of packet(SOP)20XNNLength of packet payload30X00General Lingo40X38StartIDPS50XNNtransID [bit 15:8] Transaction ID60XNNtransID [bit 7:0]70XNN校验

这是iphone的命令包,大家看到这个应该就明白了。开始IDPS过程首先要发送StartIDPS命令,这样,外设与iphoneOS之间的认证过程就开始了。其中咱们应用中EAAccessory关于一些外设的属性,都是在这个过程中外设发给操作系统的,具体还是大家加入苹果的mfi(made for ipod),拿到资料后,才能更明白。稍后我会将iphone串口通信的源码发出来。先写到这儿吧,这些东西不能说的太多,希望会对大家有点帮助。

和配件进行通讯

在iPhone OS 3.0及之后的系统上,External Accessory(ExternalAccessory.framework)提供了一种管道机制,使应用程序可以和iPhone或iPod touch设备的配件进行通讯。通过这种管道,应用程序开发者可以将配件级别的功能集成到自己的程序中。

为了使用External Accessory框架的接口,您必须将ExternalAccessory.framework加入到Xcode工程,并连接到相应的目标中。此外,还需要在相应的源代码文件的顶部包含一个#import <ExternalAccessory/ExternalAccessory.h>语句,才能访问该框架的类和头文件。有关如何为工程添加框架的更多信息,请参见中的部分;有关External Accessory框架中类的一般信息,请参见External Accessory框架参考。

配件的基础

在和配件进行通讯之前,需要与配件的制造商紧密合作,理解配件提供的服务。制造商必须在配件的硬件中加入显式的支持,才能和iPhone OS进行通讯。作为这种支持的一部分,配件必须支持至少一种命令协议,也就是支持一种定制的通讯模式,使配件和应用程序之间可以进行数据传输。苹果并不维护一个协议的注册表,支持何种协议及是否使用其他制造商支持的定制或标准协议是由制造商自行决定的。

作为和配件制造商通讯的一部分,您必须找出给定的配件支持什么协议。为了避免名字空间发生冲突,协议的名称由反向的DNS字符串来指定,形式是com.apple.myProtocol。这使得每个配件制造商都可以根据自己的需要定义协议,以支持不同的配件产品线。

应用程序通过打开一个使用指定协议的会话来和配件进行通讯。打开会话的方法是创建一个类的实例,该类中包含和对象,可以和配件进行通讯。通过这些流对象,应用程序可以向配件发送未经加工的数据包,以及接收来自配件的类似数据包。因此,您必须按照期望的协议来理解每个数据包的格式。

声明应用程序支持的协议

能够和配件通讯的应用程序应该在其Info.plist文件中声明支持的协议,使系统知道在相应的配件接入时,该应用程序可以被启动。如果当前没有应用程序可以支持接入的配件,系统可以选择启动App Store并指向支持该设备的应用程序。

为了声明支持的协议,您必须在应用程序的Info.plist文件中包含UISupportedExternalAccessoryProtocols键。该键包含一个字符串,用于标识应用程序支持的通讯协议。您的应用程序可以在这个列表中以任意顺序包含任意数量的协议。系统并不使用这个列表来确定应用程序应该选择哪个协议,而只是用它来确定应用程序是否能够和相应的配件进行通讯。您的代码需要在开始和配件进行对话时选择适当的通讯协议。

在运行时连接配件

在配件接入系统并做好通讯准备之前,通过External Accessory框架无法看到配件。当配件变为可见时,您的应用程序就可以获取相应的配件对象,,然后用其支持的一或多个协议打开会话。

累死累活不说,走马观花反而少了真实体验,

关于iphone accessory的理解

相关文章:

你感兴趣的文章:

标签云: