外围设备

Android - BlueTooth BLE 之 Central 与 Peripheral

匿名 (未验证) 提交于 2019-12-03 00:19:01
一.前言 Andorid 5.0 之前是无法进行 外围设备开发的,在Android 5.0 API 21 android.bluetooth.le包下,新增加 Scaner相关类和 Advertiser 相关类。目前最后使用Scanner相关类实现蓝牙扫描。这段时间对蓝牙的学习与理解,对中心设备与周边设备做下面总结。 android.bluetooth.le 1. 2. 3. BlueToothDevice#connectGatt() 如果你对 Central 与 Peripheral 理解的话,就移步下面文章 ! Android 5.0 BLE 实现中心与外围设备 (待更…) 二. Central 和 Peripheral 1. 蓝牙通信规则 Central Peripheral 客户端-服务端 结构。 Peripheral 客户端(中心设备): Central Perpheral 如下图所示,心跳监听器提供心跳数据,在你的其他设备的app上 需要以用户友好的方式显示用户的心跳信息。 2.Central 发现并连接广播中的 Peripheral 在BLE中 , Peripheral Central 提供数据是主要方式。主要操作如下: 服务端 外围设备( Peripheral ): 向外广播数据包(Advertising)形式的数据,比如设备名称,功能等! 客户端 中心设备(

蓝牙BLE: 蓝牙4.0 BLE广播数据解析(转)

戏子无情 提交于 2019-12-02 15:38:04
BLE 设备工作的第一步就是向外广播数据。广播数据中带有设备相关的信息。本文主要说一下 BLE 的广播中的数据的规范以及广播包的解析。 1. 广播模式 BLE 中有两种角色 Central 和 Peripheral ,也就是中心设备和外围设备。中心设备可以主动连接外围设备,外围设备发送广播或者被中心设备连接。外围通过广播被中心设备发现,广播中带有外围设备自身的相关信息。 广播包有两种: 广播包 (Advertising Data)和 响应包 (Scan Response),其中广播包是每个设备必须广播的,而响应包是可选的。 数据包的格式如下图所示(图片来自官方 Spec): 每个包都是 31 字节,数据包中分为有效数据(significant)和无效数据(non-significant)两部分 有效数据部分 :包含若干个广播数据单元,称为 AD Structure 。如图中所示,AD Structure 的组成是:第一个字节是长度值 len,表示接下来的 len 个字节是数据部分。数据部分的第一个字节表示数据的类型 AD Type ,剩下的 Len - 1 个字节是真正的数据 AD data 。其中 AD type 非常关键,决定了 AD Data 的数据代表的是什么和怎么解析,这个在后面会详细讲; 无效数据部分 :因为广播包的长度必须是 31 个 byte,如果有效数据部分不到

内核态和用户态

北城以北 提交于 2019-11-30 07:01:41
内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。 用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。 为什么要有用户态和内核态? 由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 -- 用户态和内核态。 用户态与内核态的切换 所有用户程序都是运行在用户态的, 但是有时候程序确实需要做一些内核态的事情, 例如从硬盘读取数据, 或者从键盘获取输入等. 而唯一可以做这些事情的就是操作系统, 所以此时程序就需要先操作系统请求以程序的名义来执行这些操作. 这时需要一个这样的机制: 用户态程序切换到内核态, 但是不能控制在内核态中执行的指令 这种机制叫系统调用, 在CPU中的实现称之为陷阱指令(Trap Instruction) 他们的工作流程如下: 用户态程序将一些数据值放在寄存器中, 或者使用参数创建一个堆栈(stack frame), 以此表明需要操作系统提供的服务. 用户态程序执行陷阱指令 CPU切换到内核态, 并跳到位于内存指定位置的指令, 这些指令是操作系统的一部分, 他们具有内存保护, 不可被用户态程序访问 这些指令称之为陷阱(trap)或者系统调用处理器(system

操作系统的界面

*爱你&永不变心* 提交于 2019-11-30 03:21:56
操作系统的界面 操作系统为用户提供用户界面 作业 严格:在一次应用业务处理过程中,从输入开始到输出结束,用户要求计算机所做的有关该次业务处理的全部工作称为一个作业。作业由不同的顺序相连的作业步组成。 l理解:做一件工作,从输入业务到输出结果,让计算机所做的全部工作叫作业 作业是由不同顺序相连的作业步相连的 做饭: 洗菜->淘米->炒菜->拿碗筷->洗手->吃饭 对应业务流程 作业步就是这个过程中的一个步骤,比如洗菜、蒸米饭 每一个作业步产生下一步的输入文件,其实也就相当于只有你做饭才能吃 作业和程序有什么区别? 从系统的角度看,作业则是一个比程序更广的概念。它由 程序 、 数据 和 作业说明书 组成。 系统通过作业说明书控制文件形式的程序和数据,使之执行和操作。 理解:作业说明书说明这个作业怎么用,怎么执行,得按照说明书来做事情 在批处理系统中, 作业是抢占内存的基本单位 。也就是说,批处理系统以作业为单位把程序和数据调入内存以便执行。 作业组织 作业 程序(必须得含有,否则不叫做作业) 数据 作业说明书 作业说明书,包括作业的 基本描述 、 作业的控制意图 、 资源要求描述 作业说明书在操作系统中生成一个作业控制块,(job control block,JCB),是一个表格,登记该作业所 要求的资源情况 、 预计执行时间 、和 执行优先级 了解: 一般来说

用户态和内核态&操作系统

限于喜欢 提交于 2019-11-28 10:15:36
用户态和内核态 内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。 用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。 为什么要有用户态和内核态? 由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 -- 用户态和内核态。 用户态与内核态的切换 所有用户程序都是运行在用户态的, 但是有时候程序确实需要做一些内核态的事情, 例如从硬盘读取数据, 或者从键盘获取输入等. 而唯一可以做这些事情的就是操作系统, 所以此时程序就需要先操作系统请求以程序的名义来执行这些操作. 这时需要一个这样的机制: 用户态程序切换到内核态, 但是不能控制在内核态中执行的指令 这种机制叫系统调用, 在CPU中的实现称之为陷阱指令(Trap Instruction) 他们的工作流程如下: 用户态程序将一些数据值放在寄存器中, 或者使用参数创建一个堆栈(stack frame), 以此表明需要操作系统提供的服务. 用户态程序执行陷阱指令 CPU切换到内核态, 并跳到位于内存指定位置的指令, 这些指令是操作系统的一部分, 他们具有内存保护, 不可被用户态程序访问 这些指令称之为陷阱(trap)或者系统调用处理器