精华内容
下载资源
问答
  • Transifex与GTK文档翻译, Linux镜像文件, 外设接口杂谈

    Transifex与GTK文档翻译

    参与GTK+开发的一段小经历(2013.10)

    最近忽然对GTK+产生了浓厚的兴趣,打算研究一下。学习一个新东西,最好的方法就是先阅读一下它的文档。应该说GTK的文档虽然比不了MSDN,但也颇为详尽。主要的问题在于文档都是英文的,阅读起来比较吃力。

    考虑到GTK已经有15年的历史,所以试着在网上搜了一下参考手册的中文版,结果找到了这个网址:http://code.google.com/p/gtk-doc-cn/

    这是一个叫yetist的人发起的翻译项目。

    http://forum.linuxfans.org/viewthread.php?tid=164933

    https://wiki.ubuntu.org.cn/viewtopic.php?f=163&t=232005&start=15

    这两个网页讲述了他发起这个项目的经历。

    至于GTK官方的语言翻译地址,查了半天也没找到,所以也就没有办法贡献自己的力量了。

    在学习兼翻译的过程中,发现了一个我搞不懂的地方,于是给GTK官网上的Bugzilla发了一个bug,结果很快就收到了回复,一段有趣而愉快的经历。看来以后可以多参加一些开源社区的活动,积攒自己的人品,^_^。

    Transifex(2015.6)

    上面提到的yetist同学发起的翻译项目,使用Transifex作为翻译协作工具。其网址为:

    https://www.transifex.com/projects/p/gobject-reference-manual/

    yetist同学还同时主导了一系列的GTK文档翻译项目。有兴趣的同学,可以根据自己的情况,选择性的进行翻译。

    2013年的时候,我曾经翻译了一部分GObject文档,并提交给yetist。但他近来已不活跃,未能及时处理我的提交请求。直到最近我才被接纳为GObject项目的翻译人员。于是就有了下面的对transifex的初体验。

    另外说一下,我翻译的部分主要参考了TualatriX的成果,他的网址是:

    http://imtx.me/

    他也是ubuntu-tweak的作者。我经常用这个软件清理磁盘。

    GTK文档翻译流程

    由于Google Code即将关闭,翻译项目的网址搬迁到:

    https://github.com/yetist/gtk-doc-cn

    或者也可以在我的github下找到这个项目的fork:

    https://github.com/antkillerfarm/gtk-doc-cn

    欢迎大家向yetist或者我的github提交翻译成果。

    从项目的log可以看出,yetist同学不仅自己翻译了很多内容,而且还编写了整个翻译自动处理的框架。

    该框架的大概流程如下:

    1.下载代码,并使用gtk-doc工具,抽取代码中的注释,生成帮助文档的po文件。

    2.将po文件发布到Transifex平台,由网上的翻译志愿者,翻译po文件。

    3.将翻译好的po文件,合并到代码中,并生成最终的html格式的文档。其中合并和生成,都可以使用框架提供的命令来完成。

    前两步yetist同学已经做好了,我们需要做的主要是第3步。

    框架的基本用法见项目的说明文档,这里仅列举文档中未提到的细节:

    1.环境准备

    以Ubuntu为例,可用以下命令安装依赖软件包:

    sudo apt-get install python python-pip fam gtk-doc-tools gnome-doc-utils

    框架需要初始化:

    make init

    2.Transifex客户端

    Transifex客户端用于同步Transifex平台的翻译更新,其使用方法和git颇为类似。它的官方地址如下:

    http://docs.transifex.com/client/

    以下仅列出必要的操作,完整的操作参见官网。

    1)安装

    pip install transifex-client

    2)初始化

    tx init

    3)配置

    tx set --auto-remote <url>

    4)下载

    tx pull -a

    3.合并po文件

    1)修改项目目录下的AUTHORS文件,添加你要翻译的po文件。

    2)将翻译后的po文件,放到po或者xmlpo文件夹中,并改为上一步时你起的名字。

    3)合并。

    make merge

    4)生成最终文档。

    make docs

    这里不知是否存在bug,有的时候这个命令需要运行两次,第1次失败,第2次就可以看到最终的文档了。

    GLib的Socket操作

    示例如下:

    https://github.com/antkillerfarm/antkillerfarm_crazy/tree/master/helloworld/glib/network

    需要注意的是,此例中Server端采用的是阻塞式操作,因此会将main loop阻塞住。如果main loop需要处理其他事件的话,这里可使用GThreadedSocketService启动单独的线程,处理之。

    Linux镜像文件

    vmlinux

    这是源代码直接生成的镜像文件。以x86平台为例:

    arch\x86\kernel\vmlinux.lds.S–这是链接脚本的源代码,经过C语言的宏预处理之后会生成vmlinux.lds,使用这个脚本,链接即可得到vmlinux,其过程与普通应用程序并无太大区别,也就是个elf文件罢了。

    image

    vmlinux使用objcopy处理之后,生成的不包含符号表的镜像文件。这是linux默认生成的结果。

    zImage

    zImage = 使用gzip压缩后的image + GZip自解压代码。使用make zImage或者make bzImage创建。两者的区别是zImage只适用于大小在640KB以内的内核镜像。

    uImage

    uImage = uImage header + zImage。使用uboot提供的mkimage工具创建。

    以上的这些镜像文件的关系可参见:

    http://www.cnblogs.com/armlinux/archive/2011/11/06/2396786.html

    http://www.linuxidc.com/Linux/2011-02/32096.htm

    Flash镜像

    一般来说,一个完整的linux系统,不仅包括内核,还包括bootloader和若干分区。这些镜像文件散布,不利于批量生产的进行。这时就需要将之打包,并生成一个可直接用于生产烧写的Flash镜像。

    可使用mtd-utils库中的ubinize工具生成Flash镜像。

    mtd-utils的官网是:

    http://www.linux-mtd.infradead.org/

    安装方法:

    sudo apt-get install mtd-utils

    mtd-utils还可用于烧写分区。例如如下命令:

    mtd write xyz.uimage linux

    其中xyz.uimage是镜像文件名,linux是分区名称。

    参考:

    http://blog.csdn.net/andy205214/article/details/7390287

    从代码来查看板子的MTD分区方案,主要是搜索mtd_partition类型的使用定义。比如mini2440板子的分区方案可在mini2440_default_nand_part数组中查到。

    外设接口杂谈

    USB_IN和USB_OUT

    粗看这个也觉得奇怪,USB总线是双向传输的,怎么还有IN和OUT的区别。后来才知道这是相对于USB HUB而言的。靠近根节点的那边是IN,靠近设备的那边是OUT。这里之所以用“靠近”这个词,是因为USB是树状结构的,USB HUB相当于是这个树中,层与层之间的连接器。

    USB HUB的典型实例是用的比较广的1路转2路或者1路转4路的USB扩展器。

    UART

    UART的硬件形态分为TTL、RS232和RS485等,其中最常用的是RS232,也就是有的PC主板上提供的那种9针的接口。

    从原理来讲,RS485和USB类似都采用了双绞线和差分编码。

    各种外设接口物理层对比

    这里不打算罗列各种外设接口的规格参数,也不打算给出一个表格对比各个方面。我的目的是在对比各种外设接口的过程中,总结设计外设接口所需要注意的地方。

    1.数据线

    外设接口的目的是传输数据,因此数据线是必不可少的。由于一根数据线无法同时处于两种状态,因此,必须有两根独立的数据线,才能实现真正的全双工。否则,至多是半双工。

    2.时钟线

    时钟用于划分数据位,起到标尺的作用,否则通信双方是无法理解一段高电平表示的是多少个“1”。(这里假设高电平表示“1”)

    时钟有三种形式:

    1.约定式。通信双方约定一个时钟频率进行通信。最典型的是UART接口。这种方式的好处是无需时钟线。但由于两侧时钟是异步时钟,时间长了之后就会出现同步错误,因此这种方式只适合慢速接口。一个改进的方法是通过在数据中加入停止位,来纠正累积的时钟同步误差。

    2.时钟线。这种方式通常设计为主从式,即主设备提供时钟信号,而从设备利用该信号同步自己的时钟。比较典型的是I2C、I2S、SPI。

    3.时钟线和数据线混合式。典型如USB所采用的差分编码,虽然是两根数据线D+和D-,但从信息量来说,相当于其他接口的数据线+时钟线。也可以换句话来说,由于时钟和数据是信息中相互独立的分量,因此,无论采用何种编码方式,都不能以少于2根线的方式提供完整的数据线+时钟线的功能。

    正因为如此,USB 2.0虽然有两根数据线,但它实际上只是个半双工接口。而USB 3.0在USB 2.0的基础上,又添加了两根数据线,才成为了真正的全双工设备。

    3.数据有效

    分为电平式和边沿式两种。前者如I2C,只允许数据在时钟信号为低电平时改变,后者如SPI,规定数据在时钟信号的边沿有效。

    I2C

    这里写图片描述
    I2C的读写时序一般如上图所示。从中可以看出I2C的数据由从机地址、读写标志位、寄存器地址和普通数据位组成。其中后面的三部分在其他的外设接口中也能见到,意义大致相同,这里就不赘述了。这里重点谈谈从机地址。

    I2C相比于UART和SPI,其优点在于一个接口可以外接多个设备(多个从设备的情况较多)。从机地址就是用于区分这些设备的。以7位从机地址为例,高4位一般由设备厂家分配设定,低3位由用户设定。因此一个I2C总线上可以挂接多个同类设备,只要用户设定好它们的地址就可以了。与SPI的片选不同,I2C的用户设定位采用连接上下拉电阻的方式设定,而不用连接到主设备上。

    在Linux内核中,使用I2C_BOARD_INFO宏设置从机地址。

    SMBus

    SMBus(System Management Bus,系统管理总线)是1995年由Intel提出的,应用于移动PC和桌面PC系统中的低速率通讯总线。由于它大部分基于I2C总线规范,因此在Linux内核中,被归类为I2C总线。

    中文编码格式问题

    常用的中文编码格式,主要包括大陆的GB系列和台湾的BIG5系列。

    GB系列按照发布时间的顺序,又包括GB2312、GBK和GB18030三种格式。越晚的编码格式,其包含的字符数越多,但同时又兼容之前的编码格式。

    除此之外,能表示中文的还有Unicode系列。比如,Java内部使用的UTF16BE,以及网络上用的比较多的UTF8。

    需要指出的是,由于各种编码格式的字节数不尽相同,单独对文章中的某些字段进行转码,常会由于字节对齐的问题,而产生异常的结果。最好是在一种编码下生成整个文档之后,统一转换成另一种格式。

    展开全文
  •  UART接口 UART是UniversalAsynchronousReceiver/Transmitter的缩写,翻译成中文就是“通用异步收发传输器”,顾名思义,这是一个异步收发信息的接口,通常用于芯片与外部设备通信连接。uart是单bit传输接口,因.....

      无论是做芯片研发还是方案开发的工程师们都应该了解芯片有哪些常用的外设接口,以及它们的作用是什么?今天给大家介绍一下芯片通常都集成的外设接口!

     UART接口

      UART是UniversalAsynchronousReceiver/Transmitter的缩写,翻译成中文就是“通用异步收发传输器”,顾名思义,这是一个异步收发信息的接口,通常用于芯片与外部设备通信连接。uart是单bit传输接口,因此在发送端需要对数据做并-串转换,相反的,在接收端要做串并转换。

    80e11ca5ca04108ba25b1693158919a8.png

      SPI接口

      SPI是SerialPeripheralInterface的缩写,翻译成中文是“串行外设接口”。和UART不一样,SPI是同步通信的接口,而且也更高速,支持全双工通信。通信中分主设备和从设备,由主设备控制通信流程,但它也有一个缺点,那就是通信过程中没有应答机制。

      IIC接口

      IIC是Inter-IntegratedCircuit的缩写,翻成中文是“集成电路总线”。它也是同步通信接口,只需要两根线,支持双向通信。IIC接口协议是由飞利浦半导体公司发明设计出来的,现在大部分芯片都会集成这个接口,和SPI不同的是,这个接口协议通信过程中有应答机制。

    I2S接口

      I2S接口是Inter-ICSound的缩写,中文名称是集成电路内置音频总线。这个接口有点特殊,是专门用于数字音频设备之间的传输数据,同样由飞利浦半导体公司设计出来。它的特点是把时钟和数据信号分开,避免了因输出过程中的时差带来的失真效果。

      今天先给大家介绍芯片中最常用的4个外设接口,实际上不同芯片针对特定的应用会相应的外设接口,比如针对视频应用场景、音频应用场景、无线通信应用场景等,以后再继续给大家分享。

    展开全文
  • 里面包含chm原版文件以及解压后的网页文件,原版文件为全英文,中文可通过网页文件使用浏览器进行中文翻译
  • ANCS协议翻译

    2016-09-02 15:18:00
    苹果通知中心(Apple Notification Center Service, ANCS)的目的是提供给蓝牙外设一种简单、方便的获取ios设备通知信息的方式。 依赖 ANCS的使用没有依赖,它是GATT的一个子集,任何一个实现了GATT client的...

    综述

    苹果通知中心(Apple Notification Center Service, ANCS)的目的是提供给蓝牙外设一种简单、方便的获取ios设备通知信息的方式。

     

    依赖

    ANCS的使用没有依赖,它是GATT的一个子集,任何一个实现了GATT client的设备可以方便的从ios设备获取通知信息。

     

    传输注意事项

    如果没有特殊说明,通过ANCS传输的数值均使用小端模式。

    如果没有特殊说明,通过ANCS传输的字符串均使用UTF-8编码。

     

    概念定义

    l  ANCS:苹果通知中心服务

    l  NP(Notification Provider):通知的产生者,一般是ios设备

    l  NC(Notification Consumer):通知的消费者,一般是蓝牙设备

    l  iOS notification:ios设备里出现的通知

    l  GATT notification:GATT characteristic发送的通知

     

    Service定义

    ANCS使用了一个私有UUID作为其Service的UUID:

    7905F431-B5CE-4E99-A40F-4B1E122D00D0

     

    NP上只有一个ANCS实例,基于ios的机制,ANCS没有办法保证一直运行。

    所以NC需要搜索并且监听(subscribe)Service Changed characteristic,以保证能够坚挺到所有通知。

    (怎么做。。。。Service Changed characteristic是啥)

     

    Characteristic类型

    所涉及的characteristic

     1、Notification Source:

       UUID 9FBF120D-6301-42D9-8C58-25E699A21DBD(notifiable)

       基本通知源,通知一些计数的信息;

      

     2、Control Point:

       UUID 69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9(writeablewithresponse)

       控制器,用于向ios设备写入控制信息,例如读取详情;

     

     3、Data Source:

       UUID 22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB(notifiable)

       数据源,用于提供详细数据,在控制信息写入后通过此characteristic返回;

     

    还有许多其他characteristic,不过只有Notification Source是强制的,其他的都是可选的。

     

    Notification Source

    通知信息更新时,从NP发给NC的消息。

    有以下一些情况:

    l  新的ios通知到来;

    l  ios通知有改动;

    l  ios通知移除;

    技术分享 

     

    l  EventID:消息类型,添加(0)、修改(1)、删除(2);

    l  EventFlags:消息优先级,静默(1)、重要(2);

    l  CategoryID:消息类型;

    l  CategoryCount:消息计数;

    l  NotificationUID:通知ID,可以通过此ID获取详情;

     

    Notification的生命周期如下:

    技术分享 

     

    Get Notification Attributes

    当NC希望从NP读取Notification的详细信息时,它需要向Control Point characteristic发送一些命令,格式如下:

     技术分享

    l  CommandID:设为0;

    l  NotificationUID:对应Notification Source中相同名字的字段;

    l  AttributeIDs:NC希望读取的变量ID列表,有些变量可能需要跟一个16bit的数说明想要的最大长度;

     

    NP接收到此命令后,会通过Data Source characteristic将结果返回(通过GATT Notification),所以你需要监听这个参数。此命令发出后对应的返回信息如下:

    技术分享 

    l  CommandID:为0;

    l  NotificationUID:对应之前请求的UID;

    l  AttributeList:查询结果列表,每一项的格式都是:ID/16bit  Length/Value,每个attribute都是一个字符串,其长度由Length指定,但是此字符串不是以NULL结尾。若找不到对应的Attribute,则Length为0;

     

    * 如果返回的消息长度大于GATT最大传输长度(MTU),则其会被分割成多个分段。蓝牙设备必须将这些分段组装起来。当所有请求属性的内容都接收完成后,此过程才算完成;

     

    Get App Attributes

    此命令允许NC读取NP上安装app的特定属性,它需要向Control Point characteristic发送一些命令,格式如下:

    技术分享 

    l  CommandID:设成1;

    l  AppIdentifier:App ID,这个字符串必须使用NULL结尾(“\0”吧);

    l  AttributeIDs:希望获得属性的列表;

     

    此命令的响应消息格式如下:

     技术分享

    l  CommandID:为1;

    l  AppIdentifier:App ID,与之前的请求ID对应;

    l  AttributeList:属性值列表,每一个格式都是:ID/16-bit Length/Value,每个attribute都是一个字符串,其长度由Length指定,但是此字符串不是以NULL结尾。若找不到对应的Attribute,则Length为0;

     

    * 关于分段以及传输结束的判断标准,与Get Notification Attributes一致;

     

    Session(会话)

    ANCS session 在NC订阅Notification Source之后开始,在取消订阅或者连接断开之后结束。由于ANCS不是一个完全同步的服务,它不会在会话中记录状态。所以,所有的NotificationUID以及AppIdentifier仅在某个特定的会话周期内有效。(换句话说,那些ID只是在会话后开始的计数,下次再连接重新计数)

    当某个会话结束时,NC需要清空所有ID以及数据内容。当新的会话开始时,NP会尽量把现有的通知都发给NC。NC可以使用这些信息知道当前尚未处理的通知有哪些。

     

    Attribute Fetching and Caching

    我们建议,只在用户做出操作时才获取attribute。例如,一开始只是展示一个通知列表,然后在用户点击某一个后才查询详细的信息。

     

    另外,我们建议在一次会话中建立一张App attribute的缓存表,这样可以避免重复获取一些常量attribute。

     

    Error Codes

    写入Control Point characteristic时,可能会有错误发生,错误码定义如下(在哪里返回错误码。。。同一次请求中么):

    0xA0 : 未知命令,commandID非法;

    0xA1 : 无效命令,命令的格式错误;

    0xA2 : 无效参数,某一个参数(例如NotificationID无效)

     

    如果有错误发生,就不会有Data Source返回。

     

    时序图

    下面展示了NP与NC之间的常见交互时序:

     技术分享

     

    下面的图展示了获取详细信息的时序:

     技术分享

     

     

    CategoryID

    技术分享 

     

    EventID

    技术分享 

     

    EventFlags

     技术分享

     

    CommandID

    技术分享 

     

    NotificationAttributeID

     技术分享

     技术分享

     技术分享

     

    AppAttributeID

     技术分享

     

    实际实验之DataSource读取

    主要是介绍一下读取的各个AttrID返回的都是啥:

    电话:

    AttrID

    返回值

    0(App ID)

    com.apple.mobilephone

    1(Title)

    1 (326) 021-3971(电话号码,不过划分方式好怪。。。)

    如果此号码存了名字,则是电话本中的名字

    2(SubTitle)

    如果此号码存了名字,则是mobile

    3(Message)

    Incoming Call

     

    短信:

    AttrID

    返回值

    0(App ID)

    com.apple.MoileSMS

    1(Title)

    10698109555991

    01051726663

    +86 132-6021-3971

    如果此号码存了名字,则是电话本中的名字

    2(SubTitle)

    3(Message)

    短信的内容

     

    微信:

    AttrID

    返回值

    0(App ID)

    com.tencent.xin

    1(Title)

    微信

    2(SubTitle)

    3(Message)

    发信人:内容

    转载于:https://www.cnblogs.com/sleepingSun/p/5833629.html

    展开全文
  • 本⽂文是苹果《Core Bluetooth Programming Guide》的翻译。 关于Core Bluetooth Core Bluetooth 框架提供了蓝⽛牙低功耗⽆无线设备与 iOS 应⽤用或 Mac 应⽤用通讯的必要的类。应⽤用可以发现,探索低功耗...

    本⽂文是苹果《Core Bluetooth Programming Guide》的翻译。 

    关于Core Bluetooth

    Core Bluetooth 框架提供了蓝⽛牙低功耗⽆无线设备与 iOS 应⽤用或 Mac 应⽤用通讯的必要的类。应⽤用可以发现,探索低功耗外设,并与它交互,⽐比如⼼心率监控器和数字 温度调节器。 从 OS X V10.9 和 iOS 6 之后,Mac 和 iOS 设备也能充当蓝⽛牙低功耗外设给包括 Mac 和 iOS 在内的其他设备提供数据服务了。 

     

    概览

    蓝⽛牙低功耗⽆无线技术(BLE)基于蓝⽛牙4.0规范,在其基础上定义了⼤大量低功耗设备之间通信的协议。Core Bluetooth 框架是蓝⽛牙低功耗协议栈的抽象。也就是 说,它对开发者隐藏了规范底层的许多细节,使得你开发与蓝⽛牙低功耗设备通讯的应⽤用变得容易。

    主机(Central)和外设(Peripheral)是 Core Bluetooth 的关键⾓角⾊色

    在蓝药低功耗通讯中,有两个关键的⾓角⾊色: 主机 和 外设 。⼀一个典型的外设拥有其他设备需要的数据。⼀一个典型的主机使⽤用外设提供的信息完成某些任务。例 如,BLE数字温度调节器可以提供室内温度给⼀一个 iOS 应⽤用,然后应⽤用将温度⽤用⽤用户友好的⽅方式展现出来。 外设在空⽓气中⼲⼴广播数据。⽽而主机可以扫描拥有它感兴趣的数据的外设。当主机发现这样的外设时,主机可以请求连接该外设然后探索和交互。然后外设以主机期 望的⽅方式响应主机的请求。

    #### Core Bluetooth 简化了通⽤用的蓝⽛牙任务
    Core Bluetooth 框架抽象了蓝⽛牙4.0规范的底层细节。这样应⽤用中需要完成的许多常⽤用的 BLE 任务都变得很简单了。如果你开发的应⽤用是完成蓝⽛牙主机功能, Core Bluetooth 让它很容易发现和与外设连接,容易探索外设和与外设交互。另外,Core Bluetooth 让你很容易使⽤用本地设备来充当外设。 

     

    iOS 应⽤用状态影响蓝⽛牙⾏行为

    当 iOS 应⽤用处于后台或者挂起状态,与蓝⽛牙相关的功能会受到影响。默认情况下,应⽤用在后台或者挂起状态下不能完成 BLE 任务。如果你的应⽤用需要在后台完成 BLE 任务,你需要声明⼀一个或者全部两个 Core Bluetooth 应⽤用的执⾏行模式(⼀一个是主机,⼀一个是外设)。即使你声明了他们的执⾏行模式,但是当应⽤用在后台时, 某些特定的蓝⽛牙任务操作还是会与前台有所区别。在设计应⽤用时需要注意这些差别。
    ⽀支持后台处理的应⽤用可能在任何时候被系统终⽌止然后释放内存。⾃自 iOS 7,Core Bluetooth ⽀支持保存主机和外设管理的对象,也⽀支持在应⽤用重启时恢复状态。你可 以使⽤用这个特性来⽀支持必要的⻓长期蓝⽛牙设备任务。

    按照最佳实践加强⽤用户体验
    

    Core Bluetooth 框架让你控制许多通⽤用的 BLE 传输。你需要按照最佳实践负责任的完成这个层级的控制,增强⽤用户体验。 例如,许多任务需要使⽤用设备⽆无线电来发射信号,⽽而设备⽆无线电是与其他形式的⽆无线通讯共享的,并且⽆无线电使⽤用对电池的使⽤用寿命有很⼤大的影响,所以设计应用时要尽量减少对无线电的使⽤。

     

    Core Bluetooth 概览

    Core Bluetooth 框架让你的 iOS 和 Mac 应⽤用与 BLE 设备通信。例如,你的应⽤用发现,探索,并与 BLE 设备通信(⼼心率监控器,数字温度调节器,甚⾄至其他 iOS 设备)。
    Core Bluetooth 框架是对使⽤用低功耗设备的蓝⽛牙4.0规范的抽象。也就是说,它影藏了许多底层细节,开发者使⽤用框架可以更容易的开发与 BLE 交互的应⽤用。因为 框架基于蓝⽛牙4.0规范,所以采⽤用了规范的⼀一些原则和术语。本章介绍关键的术语和原则,这些都是你使⽤用 Core Bluetooth 开发应⽤用时必须清楚的。 

     

    主机和外设以及他们在蓝⽛通信中扮演的角⾊

    在所有的 BLE 通信中有两个主要的概念: 主机 和 外设 。基于⼀一些传统的CS体系, 外设 典型的 拥有其他设备需要的数据 。 主机 典型
    的 使⽤用外设提供的信息来完成特定的任务 。如图 1-1 所⽰示,⼀一个⼼心率监控器有些有⽤用的信息,你的 Mac 或 iOS 应⽤用需要这些数据然后将它们友好的展现给用 户。 

     

    主机发现和连接发⼲播的外设

    外设向外⼲⼴广播⼀一些⼲⼴广播包形式的数据。 ⼲⼴广播包 是外设提供的包含有⽤用信息的⼀一束数据,例如外设的名称和主要功能。举个例⼦子,数字温度调节器可以⼲⼴广播当前 室温。在 BLE,⼲⼴广播是外设被感知存在的主要⽅方式。
    主机能够扫描,侦听任何它感兴趣的正在⼲⼴广播的外设。如图 1-2 所⽰示,主机能够请求连接它发现的外设。 

    外设的数据如何组织

    连接外设的⺫⽬目的是为了探索外设并与外设交互数据。在做这个之前,有必要理解外设的数据是怎么组织的。 外设可以包含⼀一个或者多个服务来提供连接信号强度相关的有⽤用的信息。 服务 是 设备完成某功能相关的数据集合或者设备某特征数据的集合 。例如,⼼心率监 

    控器可以展⽰示来⾃自⼼心率传感器的⼼心率数据。 服务 由 特征(characteristics) 或者 其他服务 组成。 特征 提供外设服务的进⼀一步详情。例如,⼼心率服务 可能仅仅包含⼀一个描述⼼心率传感器预定位置的特征和另外⼀一个发送⼼心率测量数据的特征。图 1-3 列出了⼼心率监控器服务和特征的数据结构。 

     

    如何描述主机,外设,外设数据

    在 Core Bluetooth 框架中,BLE 的主要参与者和数据都被映射得简单⽽而轻量。

    主机端相关对象

    使⽤用本地主机与远程外设通信时,你在主机端完成操作。除⾮非你设置⼀一个本地外设,然后使⽤用它响应主机的请求,否则⼤大多数蓝⽛牙传输发⽣生在主机这⼀一端。
    

    本地主机和远程外设

    在主机端,本地主机设备⽤用 CBCentralManager 对象表⽰示。这些对象⽤用来管理发现或连接远程外设(远程外设⽤用 CBPeripheral 对象表⽰示),包括扫 描,发现,连接发⼲⼴广播的外设。

    图 1-4 显⽰示了 Core Bluetooth 框架中本地主机和远程外设如何表⽰示。 

    远程外设的数据⽤用 CBService 和 CBCharacteristic 对象表⽰示

    当你与远程外设交互数据的时候,实际上是处理它的服务和特征。在 Core Bluetooth 框架中,远程外设的服务⽤用 CBservice 对象表⽰示。类似的,远程外设的特征

    ⽤用 CBCharacteristic 对象表⽰示。 图 1-5 阐明了远程外设的基服务和特征的基本结构。 

    外设⽅方相关对象

    ⾃自 OS X v10.9 和 iOS 6,Mac 和 iOS 设备(包括Mac,iPhone,iPad)能够提供 BLE 外设功能,给其他设备提供服务数据。设置你的设备充当外设的⾓角⾊色时, 你要完成 BLE 通信中外设那⼀一侧的功能⾏行为。

    本地外设和远程主机

    在外设⼀一侧,本地外设⽤用 CBPeripheralManager 对象表⽰示。这些对象⽤用来管理发布本地外设服务和特征数据库中的服务,⼲⼴广播到远程主机设备(⽤用 CBCentral 对 象表⽰示)。外设管理对象也⽤用来响应远程主机的读写请求。图 1-6 显⽰示了本地外设和远程主机在 Core Bluetooth 中的表⽰示。

    本地外设数据⽤用 CBMutableService 和 CBMutableCharacteristic 对象表⽰示

    设置⼀一个本地外设并与它交互数据时,你需要处理本地外设的多个服务和特征的版本。在 Core Bluetooth 框架,本地外设的服务⽤用 CBMutableService 对象表 ⽰示。类似的,本地外设的特征⽤用 CBMuableCharacteristic 对象表⽰示。 图 1-7 阐明了本地外设服务和特征的基本机构。 

     

     

     

     

     

    主机通常要完成的任务

    BLE 中扮演主机⾓角⾊色的设备要完成⼤大量通⽤用的任务--例如,发现和连接可以⽤用的外设,探索外设,与外设交互数据。相对⽽而⾔言,扮演外设的⾓角⾊色也需要完成⼀一些 与主机不同的通⽤用的任务,例如发布和⼲⼴广播服务,响应读写数据,处理已连接的主机的请求。
    本章将学习如何使⽤用 Core Bluetooth 完成 BLE 主机端的通⽤用任务。基于代码的⽰示例可以帮助你⽤用本地设备扮演主机的⾓角⾊色。具体来说你可以学习到:

      启动主机管理对象
      发现和连接⼲⼴广播的外设
      连接之后探索外设数据
      给外设服务的⼀一些特征值发送读写请求
      订阅特征值并在他们更新时得到通知
    
    下⼀一章将会学习如何⽤用本地设备扮演外设⾓角⾊色。
    本章的⽰示例代码简单⽽而抽象,在你实际的应⽤用中需要对其做适当的修改来完善。许多跟主机相关的⾼高级主题会再后⾯面的章节讲述。
    

     

    启动主机管理

    CBCentralManager 对象时本地主机设备⾯面向对象的表⽰示,完成 BLE 传输前需要分配和初始化⼀一个主机管理实例。你可以通过调⽤用CBCentralManager类的 initWithDelegate:queue:options: ⽅方法初始化主机管理对象,如下所⽰示: 

     myCentralManager =
     [[CBCentralManager alloc] initWithDelegate:self queue:nil options:nil];

    在这个例⼦子中,self 被设置为接收任何主机事件的委托。通过指定 dispatch queue 为 nil,主机管理对象会⽤用 main queue 主队列分发主机事件。 当你创建⼀一个主机管理对象,它会调⽤用它委托的 centralManagerDidUpdateState: ⽅方法。你需要实现改委托⽅方法确保 BLE 在主机设备上被⽀支持和可⽤用。关于如果 完成该委托⽅方法的更多信息,参⻅见 CBCentralManagerDelegate Protocol Reference。 

     

    发现在⼲⼴广播的外设

    主机端的第⼀一个任务是发现应⽤用需要连接的可⽤用的外设。正如前⾯面提到的,⼲⼴广播是外设让外界感知它存在的主要⽅方式。你可以通过调⽤用 CBCentralManager 类的 scanForPeripheralsWithServices:options: ⽅方法来发现任何正在⼲⼴广播的外设,如下所⽰示: 

    [myCentralManager scanForPeripheralsWithServices:nil options:nil];

    注意:如果第⼀一个参数填 nil,主机管理对象返回所有发现的外设,⽽而不管他们提供什么服务。在实际的应⽤用中,你需要指定⼀一个 CBUUID 对象的数组,每⼀一个 CBUUID 对象表⽰示⼀一个 UUID,代表外设正在⼲⼴广播的⼀一个服务。当你指定了 UUID 数组,主机管理对象仅返回⼲⼴广播这些服务的外设,可以让你仅扫描你感兴趣的 设备。
    在调⽤用 scanForPeripheralsWithServices:options: ⽅方法发现可⽤用的外设后,主机管理对象每发现⼀一个外设都调⽤用⼀一次它的委托⽅方法 centralManager:didDiscoverPeripheral:advertisementData:RSSI: 。任何被发现的外设都返回⼀一个 CBPeripheral 对象。如下⾯面所⽰示,你可以完成该委托⽅方法来列 出发现的任何外设: 

    -(void)centralManager:(CBCentralManager *)central
    didDiscoverPeripheral:(CBPeripheral *)peripheral
        advertisementData:(NSDictionary *)advertisementData
                     RSSI:(NSNumber *)RSSI {
       NSLog(@"Discovered %@", peripheral.name);
       ...
    当你发现你想连接的外设后,停⽌止扫描其它设备以节约电量。
    
    [myCentralManager stopScan];
     NSLog(@"Scanning stopped");

    发现外设后连接它

    在你发现你感兴趣的外设后,可以请求连接,通过调⽤用 CBCentralManager 类的 connectPeripheral:options: ⽅方法。简单的调⽤用该⽅方法到你需要连接的指定外设, 如下所⽰示: 

    [myCentralManager connectPeripheral:peripheral options:nil];

    假设连接成功,主机管理对象会调⽤用它的委托⽅方法 centralManager:didConnectPeripheral: ,你可以在建⽴立连接后记录⽇日志,如下所⽰示: 

    - (void)centralManager:(CBCentralManager *)central
     didConnectPeripheral:(CBPeripheral *)peripheral {
     NSLog(@"Peripheral connected");
     ...
    在与外设交互之前,需要设置外设的委托以确保期望的回调⽅方法能响应,如下所⽰示:
    
    peripheral.delegate = self;

     

    发现已连接外设的服务 

    在与外设建⽴立连接之后,你可以探索它的数据。探索外设的数据的第⼀一步是发现它可⽤用的服务。因为⼲⼴广播的数据量⼤大⼩小是有限制的,你需要探索外设的更多服务 ⽽而不仅是⼲⼴广播。你可以调⽤用 CBPeripheral 类的 discoverServices: ⽅方法来发现外设提供的所有服务。 

    [peripheral discoverServices:nil];

    注意:在实际的应⽤用中,你不应该传递 nil 做参数,因为这样会返回外设的所有服务。外设可能会拥有很多服务,⽽而不仅仅是你感兴趣的那些。发现服务会浪费电 池和时间。更多情况下,你应该为你感兴趣的服务指定 UUID。

    指定服务被发现时,外设(就是你已经连接上的 CBPeripheral 对象)调⽤用 peripheral:didDiscoverServices: 委托⽅方法。Core Bluetooth 建⽴立⼀一个 CBService 对象 的数组--数组的每⼀一个元素都对应⼀一个外设已发现的服务。如下所⽰示,你可以实现委托⽅方法来访问数组中的服务: 

    - (void)peripheral:(CBPeripheral *)peripheral
     didDiscoverServices:(NSError *)error {
     for (CBService *service in peripheral.services) {
         NSLog(@"Discovered service %@", service);
    ... } ...

    发现服务的特征

    假设你已经发现了你感兴趣的服务,下⼀一步探索就是发现服务提供的所有特征。简单的调⽤用 CBPeripheral 类的 discoverCharacteristics:forService: ⽅方法就可以发 现⼀一个服务的所有特征,对于⼀一个服务来说,可以操作如下所⽰示: 

    NSLog(@"Discovering characteristics for service %@", interestingService);
     [peripheral discoverCharacteristics:nil forService:interestingService];

    注意:在实际的应⽤用中,第⼀一个参数不应该传递 nil,因为这样会返回⼀一个外设服务的所有特征。因为外设的⼀一个服务可能包含许多的特征,⽽而不仅仅是你感兴趣 的那些,发现所有特征会影响电池寿命和浪费时间。更多情况下,你应该为你感兴趣的特征指定 UUID。 

    外设指定服务的特征被发现后会调⽤用它委托对象的 peripheral:didDiscoverCharacteristicsForService:error: ⽅方法。Core Bluetooth 建⽴立⼀一个 CBCharacteristic 对象 的数组--数组的每⼀一个元素都对应⼀一个已发现的特征。下⾯面的例⼦子显⽰示了如何实现委托⽅方法来简单的打印已发现的每⼀一个特征: 

    - (void)peripheral:(CBPeripheral *)peripheral
     didDiscoverCharacteristicsForService:(CBService *)service
              error:(NSError *)error {
     for (CBCharacteristic *characteristic in service.characteristics) {
         NSLog(@"Discovered characteristic %@", characteristic);
    ... } ...

     

    获取特征的值

    特征 包含了简单的值,⽤用来 表⽰示外设服务的更多信息 。例如,健康体温计服务的温度测量特征可能有⼀一个值⽤用来表⽰示摄⽒氏度。你可以直接获取或者订阅这些 值。

    读特征值

    在你找到你感兴趣的服务的特征后,你可以读取你想要的特征值,通过调⽤用 CBPeripheral 类的 readValueForCharacteristic: ⽅方法,如下所⽰示:

    NSLog(@"Reading value for characteristic %@", interestingCharacteristic);
     [peripheral readValueForCharacteristic:interestingCharacteristic];

    当你尝试读取特征值时,外设调⽤用它委托对象的 peripheral:didUpdateValueForCharacteristic:error: ⽅方法获取值。如果获取成功,可以通过特征值的属性来访问这 些值,如下所⽰示: 

    - (void)peripheral:(CBPeripheral *)peripheral
     didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic
              error:(NSError *)error {
     NSData *data = characteristic.value;
     // parse the data as needed
     ...

     注意 :并⾮非所有的特征都有可读的值。你可以通过访问 CBCharacteristicPropertyRead 来查明特征值是否可读,详情参阅 CBCharacteristic Class Reference。如果你尝试读取⼀一个不可读的值,peripheral:didUpdateValueForCharacteristic:error: 会适当的返回⼀一个错误。 

     

    订阅特征值

    虽然使⽤用 readValueForCharacteristic: ⽅方法读取特征值能够⾼高效满⾜足⼤大多数应⽤用场景,但它不是最⾼高效的获取值改变的⽅方式。⼤大多数特征值改变的时候--例如,任 意时刻的⼼心率--你应该通过订阅来获取特征值。当你订阅特征值,在值改变的时候,你能够收到外设的通知。
    你可以订阅感兴趣的特征值,通过调⽤用 CBPeripheral 类的 setNotifyValue:forCharacteristic: ⽅方法并指定第⼀一个参数为 YES,如下所⽰示: 

     [peripheral setNotifyValue:YES forCharacteristic:interestingCharacteristic];

    当你尝试订阅(或取消订阅)⼀一个特征值,外设会调⽤用它委托对象的 peripheral:didUpdateNotificationStateForCharacteristic:error: ⽅方法。如果订阅请求失败,你 可以完成该委托来访问失败原因,如下所⽰示: 

    - (void)peripheral:(CBPeripheral *)peripheral
     didUpdateNotificationStateForCharacteristic:(CBCharacteristic *)characteristic
              error:(NSError *)error {
     if (error) {
         NSLog(@"Error changing notification state: %@",
            [error localizedDescription]);

    注意 :并⾮非所有的特征都允许你订阅他们的值。你可以查明⼀一个特征是否配置为可订阅的,通过访问 Characteristic Properties 枚举,详情参阅 CBCharacteristic Class Reference。

    在成功订阅特征值之后,在值发⽣生改变的时候外设会给应⽤用发通知。每次值的改变,外设都会调⽤用它委托对象的 peripheral:didUpdateValueForCharacteristic:error: ⽅方法。要获取更新后的值,你需要实现该委托⽅方法。 

     

    写特征值 

    在很多⽤用户场景下,需要⽤用到写特征值。例如,如果你的应⽤用与⼀一个基于 BLE 的数字温度调节器交互,你需要提供⼀一个值让它设定室温。如果特征值是可写的, 你可以给它写⼊入⼀一些数据(NSData类型),通过调⽤用 CBPeripheral 类的 writeValue:forCharacteristic:type: ⽅方法,如下所⽰示: 

    NSLog(@"Writing value for characteristic %@", interestingCharacteristic); [peripheral writeValue:dataToWrite forCharacterist
     ic:interestingCharacteristic
      type:CBCharacteristicWriteWithResponse];

    当尝试写⼀一个特征值,你需要指定你需要完成的写类型。上⾯面的例⼦子指定的写类型是 CBCharacteristicWriteWithResponse,意味着外设会让你的应⽤用知道写操作 是否成功。Core Bluetooth 框架⽀支持的更多写类型信息,参⻅见 CBPeripheral Class Reference 的枚举 CBCharacteristicWriteType。 如果指定了CBCharacteristicWriteWithResponse,外设通过调⽤用委托对象的peripheral:didWriteValueForCharacteristic:error: ⽅方法来响应⼀一个写请求。如果写失 败,你可以实现该委托⽅方法来获取错误原因,如下所⽰示: 

    - (void)peripheral:(CBPeripheral *)peripheral
      didWriteValueForCharacteristic:(CBCharacteristic *)characteristic
                error:(NSError *)error {
     if (error) {
           NSLog(@"Error writing characteristic value: %@",
               [error localizedDescription]);
    } ...

    意:特征可能仅仅允许特定类型的写操作改变它的值。你可以查明特征值允许哪些写类型,通过访问 Characteristic Properties 的相关属性,详情参考 CBCharacteristic Class Reference。 

     

    外设通常要完成的任务

    在上⼀一章节,我们学习了如何完成 BLE 主机端的通⽤用任务。在本章,我们学习如何完成 BLE 外设端的通⽤用任务。基于代码的⽰示例可以帮助你⽤用本地设备扮演外 设的⾓角⾊色。具体来说你可以学习到:

      启动外设管理对象
      启动外设的服务和特征
      发布服务和特征到设备的本地数据库
      ⼲⼴广播服务
      响应已连接的主机的读写请求。
      发送更新的特征值给订阅了的主机
    

    你会发现本章的例⼦子很简单和抽象,在你实际的应⽤用中需要对其做适当的修改来完善。在本地设备完成外设功能的许多⾼高级主题--包括提⽰示,陷阱,最佳实践--在 后⾯面的章节中会覆盖到。 

     

    启动外设管理

    ⽤用本地设备扮演外设⾓角⾊色的第⼀一步就是分配和初始化⼀一个外设管理实例(⽤用 CBPeriphralManager 对象表⽰示)。通过 调⽤用 CBPeriphralManager 类的 initWithDelegate:queue:options: ⽅方法启动外设管理,如下所⽰示: 

    myPeripheralManager =
     [[CBPeripheralManager alloc] initWithDelegate:self queue:nil options:nil];

    在这个例⼦子中,self 被设置为委托对象来接受外设的事件。当你指定 dispatch queue 为 nil,外设管理对象分发外设事件到主队列。 当你创建⼀一个外设管理者,外设管理者调⽤用 peripheralManagerDidUpdateState: 委托⽅方法。你可以实现该委托⽅方法来确认 BLE 是否在本地外设上可⽤用。更多实现 该委托⽅方法的详情参考 CBPeripheralManagerDelegate Protocol Reference . 

     

    设置服务和特征 

    如图 1-7,本地外设的服务和特征数据库是树形结构。你必须以类似的树形结构来设置服务和特征。完成这些任务的第⼀一步是弄懂服务和特征时如何被定义的 

     

    服务和特征⽤用 UUID 标识 

    外设的服务和特征⽤用128位的 UUID 标识,在 Core Bluetooth 框架中使⽤用 CBUUID 对象。然⽽而不是所有服务和特征的UUID都被蓝⽛牙 Special Interest Group(SIG)预定义出来了。蓝⽛牙 SIG 已经预定义了⼤大量 UUID 为短 16 位以⽅方便使⽤用。例如 ,SIG 已经预定义存储为 16 位的 UUID 180D 标识⼼心率服务。这 个 UUID 等同于 128 位的 UUID:0000180D-0000-1000-8000-00805F9B34FB,预定义在蓝⽛牙 4.0 规范,第 3 卷,3.2.1 节。
    CBUUID 类提供了便捷的⼯工⼚厂⽅方法来处理 UUID。例如,在代码中你⽆无须传递⼼心率服务的 128 位 UUID 字符,⽽而是简单的使⽤用 CBUUID 的 UUIDWithString ⽅方 法。如下所⽰示: 

    CBUUID *heartRateServiceUUID = [CBUUID UUIDWithString: @"180D"];

    当你⽤用⼀一个预定义的 16 位 UUID 使⽤用 CBUUID 对象,Core Bluetooth 会填充其余的位。 

     

    为⾃自定义的服务和特征创建⾃自定义 UUID 

    你可以拥有⾮非预定义的服务和特征。前提是你需要⽣生成的你 128 位 UUID 来标识他们。
    使⽤用命令⾏行⼯工具的 uuidgen 指令可以很⽅方便的⽣生成 128 位的 UUID。第⼀一步,打开⼀一个终端窗⼝口,下⼀一步,在终端输⼊入 uuidgen,就可以得到⼀一个唯⼀一的 128 位 ASCII 字符串⽤用连字符(-)分隔的,下⾯面是⼀一个⽰示例: 

    $ uuidgen
     71DA3FD1-7E10-41C1-B16F-4430B506CDE7

    你可以使⽤用这个 UUID 创建⼀一个 CBUUID 对象,使⽤用 UUIDWithString ⽅方法,如下所⽰示: 

    CBUUID *myCustomServiceUUID =
     [CBUUID UUIDWithString:@"71DA3FD1-7E10-41C1-B16F-4430B506CDE7"];

     

    构建你的服务和特征树 

    在你拥有⾃自定义的 UUID 后,你可以建⽴立可变的服务和特征,然后把他们像树形结构组织在⼀一起。例如,如果你拥有⼀一个特征的 UUID, 你可以建⽴立⼀一个可变的 特征,通过调⽤用 CBMutableCharacteristic 类的initWithType:properties:value:permissions: ⽅方法,如下所⽰示: 

    myCharacteristic =
     [[CBMutableCharacteristic alloc] initWithType:myCharacteristicUUID
      properties:CBCharacteristicPropertyRead
      value:myValue permissions:CBAttributePermissionsReadable];

    当你创建⼀一个可变的特征,设置它的属性,值,权限。你决定特征的属性和权限,是否特征值是可读写的,连接的主机是否能否订阅特征值。在这个例⼦子中,特 征值被设置为可被主机读的。关于⽀支持可变特征的属性和权限的更多详情请参阅 CBMutableCharacteristic Class Reference 。

    注意 :如果你指定特征值,它的值被缓存,属性和权限被设置为可读的。如果你需要特征值可以被写,或者你希望特征所属的已发布服务的⽣生命周期内特征值 可以改变,需要设置值为 nil。遵循这个原则可以确保值⽆无论什么时候外设管理对象收到主机的读写请求,值都能被动态处理。

    到⺫⽬目前为⽌止,你已经创建了⼀一个可变的特征,你可以创建⼀一个与特征关联的可变的服务。通过调⽤用 CBMutableService 类的 initWithType:primary: ⽅方法,如下所 ⽰示: 

    myService = [[CBMutableService alloc] initWithType:myServiceUUID primary:YES];

    在该例中,第⼆二个参数设置为 YES,意思是服务是主服务(相对次要服务⽽而⾔言的)。 主服务 描述设备的中主要功能,能被别的服务包含或引⽤用。 次要服务 描 述它引⽤用的另外⼀一个服务的上下⽂文。例如,⼼心率监控器主服务可以暴露⼼心率传感器⼼心率数据,⽽而次要服务可以暴露传感器的电池数据。

    创建按服务之后,你可以通过设置服务的特征数组来关联⼀一个特征,如下所⽰示:
    
    myService.characteristics = @[myCharacteristic]; ?? 

    ?????? 

    转载于:https://www.cnblogs.com/yulang314/p/5077925.html

    展开全文
  • qemu翻译和执行流程分析

    千次阅读 2013-04-25 19:04:49
    在全系统模拟下,qemu可以模拟处理器和各种外设,可以运行操作系统。用户态可以运行为另外一种cpu编译的进程,前提是两者运行的os要一致。qemu使用了动态二进制翻译将target instruction翻译成host instruction,...
  • 每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用 API (application programming interface 应用编程界面)驱动,API 对该驱动程序的结构,函数和参数名称都进行了标准化。...
  • IT之家9月15日消息 龙芯中科宣布推出创新的办公外设利旧通用解决方案,采用跨指令兼容的二进制翻译(Binary Translation)技术,在龙芯电脑上运行原生的 Windows 驱动程序,具有 “零适配、全兼容、免网络、高安全”的...
  • ESP32 SDMMC技术文档翻译

    千次阅读 2018-03-08 19:39:07
    SDMMC 主机外设概述SDMMC 外设支持SD卡、MMC卡和SDIO卡。SDMMC的软件是基于SDMMC驱动之上的,由下面几个部分组成。SDMMC主机外设(driver/sdmmc_host.h)---驱动支持APIs接口发送命令到从机设备,发送和接受...
  • qemu 二进制翻译 执行流程分析

    千次阅读 2014-04-26 15:25:05
    在全系统模拟下,qemu可以模拟处理器和各种外设,可以运行操作系统。用户态可以运行为另外一种cpu编译的进程,前提是两者运行的os要一致。qemu使用了动态二进制翻译将targetinstruction翻译成hostinstruction,完成...
  • 【摘要:龙芯推出创新的办公外设利旧通用解决方案,采用跨指令兼容的二进制翻译(Binary Translation)技术,在龙芯电脑上运行原生的Windows驱动程序,具有“零适配、全兼容、免网络、高安全”的特点,可以完善支持...
  • 该函数库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函 数库还包括每一个外设的驱动描述和应用实例。通过使用本固件函数库,无需深入掌握细节,用户也可以 轻松应用每一个...
  • BCM2835 芯片数据手册(中文翻译

    万次阅读 2016-12-08 19:11:14
    1 前言1.1 概述BCM2835 具有以下可以被 ARM 安全使用的外设: 定时器 中断控制器 GPIO USB PCM/I2S DMA I2C 主机 I2C/SPI 从机 SPI0,SPI1,SPI2 PWM UART0,UART1 本数据手册旨在对这些外设的细节进行描述,以方便...
  • IT之家9月15日消息 龙芯中科宣布推出创新的办公外设利旧通用解决方案,采用跨指令兼容的二进制翻译(Binary Translation)技术,在龙芯电脑上运行原生的 Windows 驱动程序,具有 “零适配、全兼容、免网络、高安全”的...
  • STM32F101xx 与 STM32F103xx 固件函数库 介绍 本手册介绍了 32位基于 ARM 微控制器 STM32F101xx 与 STM32F103xx 的固件函数库 该函数库是一个固件函数包它由程序数据结构和宏组成包括了微控制器所有外设的 ...
  • 32位基于ARM微控制器STM32F101xx与STM32F103xx 固件函数库 介绍 本手册介绍了32位基于ARM微控制器STM32F101xx与STM32F103xx的固件函数库 该函数库是一个固件函数包它由程序数据结构和宏组成包括了微控制器所有外设的...
  • 该函数库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函 数库还包括每一个外设的驱动描述和应用实例。通过使用本固件函数库,无需深入掌握细节,用户也可以 轻松应用每一个...
  •  CSL是函数,宏和符号常数的集合,用来控制和配置片上外设。(Chip Support Library)  每一个外设都有自己对应的CSL模块。每个模块有自己的支持符,来表示对于给定的设备,该模块是否被支持。比如若当前的设备支持...
  • 通过该框架,应用程序可以扫描、发现BLE 外设,如心率、电子温度传感器等等,同时可以与之进行交互。 在OSX 10.9 和iOS6 中,你的mac,iOS 设备还可以扮演外设的角色。 How to Use This Document  如果你...
  • musb 中文翻译和英文文档.可以通过会话请求协议(SRP)发起USB流量,而双角色设备同时支持SRP和主机协商协议(HNP),并且可以根据需要担任主机或外设的角色。MUSBMHDRC还支持拆分事务,这反过来允许它支持使用带有USB ...
  • Core Bluetooth 框架在Mac和iOS平台,为配备了低...作为OS X v10.9和iOS 6,Mac和iOS设备也可以作为低功耗蓝牙外设,提供服务数据到其他设备,包括其他的Mac和iOS设备。 快速导读 蓝牙低功耗无线技术是基于蓝牙4...
  • 1. 芯片体系结构 【1】CPU之间的所有数据通信必须经过和Northbridge连接的总线(FSB) 【2】所有和RAM之间的通信必须通过Northbridge 【3】RAM只有一个端口(port) 【4】CPU和外设备之间的通信(外设经Southbridge...
  • 本手册介绍了32位基于ARM微控制器STM32F101xx与STM32F103xx的固件函数库。译文英文原版为 UM0427 Oct. 2007 Rev 2。此份固件库用户手册的整体架构如下: 1....3.固件库具体描述:设置架构和每个外设的函数。
  • 一、概述 PULPino是一个以RISCV架构RI5CY/ZERO-...它还包括一个boot ROM,内有boot loader,可以通过SPI从外设flash加载程序, 图1.1展示了SoC的模块框图。PULPino使用AXI作为主要的互连,具有到APB的桥接器,...
  • 例如,您的App可以发现、搜索并与低功耗外设进行交互,比如心率检测器和数字恒温器,甚至还可以和其他iOS设备进行交互。 为了使用蓝牙低功耗设备,这个框架对蓝牙4.0规范进行了抽象。换句话说,它隐藏了很多规范的...
  • Bochs 是一个可以完全模拟 Intel x86 计算机的虚拟机系统。它包含了 Intel x86 CPU 仿真、常见设备仿真、以及定制 BIOS。...Bochs 会去解释从电源启动开始的每一条指令,以及所有 PC 标准外设:键盘、鼠标、...
  • 翻译】 Unity3D VR 教程:1.VR概述

    千次阅读 2016-03-28 21:14:44
    这个指南会专注于Oculus 系列的VR设备, 特别是 Oculus Rift Development Kit 2 (DK2 ) 和 消费者版本的Gear VR(一种手机外设,需要三星Galaxy s6, s6 Edge, s6 Edge+, 或者 Note 5)。Note 4 之前是第支持创新者...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 135
精华内容 54
关键字:

外设翻译