第14节_BLE协议ATT层】的更多相关文章

下面这个图是BLE协议各层跟医院的各个科室的类比图: 跟医院类比,ATT层就是化验室,通过它可以得到各种检查结果──属性.这些检查结果之间有什么联系,它们组合起来体现了什么,化验室是不知道的,这些得由上层来负责. 通过ATT层可以读写对端设备的属性,但是属性之间有什么联系.各个属性怎么组合起来提供服务,由上层GATT负责. 读写对端设备的属性,就是ATT的关键词. 一.属性(Attribute) 属性结构如下: 属性就是一个值, 有那么多属性,这是哪一个属性?用Handle来表示: 这个属性是什…
学习资料:官方手册 Vol 3: Core System Package [Host volume] Part G: Generic Attribute Profile (GATT) 这篇文章格式比较好,基本上就是对GATT官方文档的翻译: Bluetooth GATT介绍 https://www.cnblogs.com/hzl6255/p/4158363.html 下面这个图是BLE协议各层跟医院的各个科室的类比图: 跟医院类比,GATT层就是医务室,通过它可以得到各种服务──这些服务由属性组…
学习资料:官方手册 Vol 3: Core System Package [Host volume] Part C: Generic Access Profile 下面这个图是BLE协议各层跟医院的各个科室的类比图: 每个医院的大堂都有些约定: ① 大堂里有医院的介绍,你可以根据它确定这个医院是否适合你: ② 有急救通道 ③ 要挂号,挂号后你跟医院才建立了联系,才能去找医生看病. 重点在于:怎么确定医院(是否适合你).怎么建立联系. 在BLE里,也有一些约定用来发现设备.连接设备,在GAP里定义…
学习资料:官方手册 Vol 3: Core System Package [Host volume] Part A: Logical Link Control and Adaptation Protocol Specification 建议先复习<BLE协议各层的形象化理解>,下面是我们之前用来类比的医院结构图: 下面这个图是BLE协议各层跟医院的各个科室的类比图: Controller就是快递公司,它知道把数据发给对方哪一个设备,但是它不能进入对方内部. L2CAP是“收发室”,它熟知Hos…
本篇博客由韦东山视频整理所得 如何控制链路层让其发出广播包.数据包?通过HCI层向它发出命令,也可以通过ATT层.L2CAP层向LL层发出数据. 学习资料: 蓝牙协议core_v5.0.pdf <Vol 4: Host Controller Interface [Transport Layer]> BTStack源码 回顾一下<开源蓝牙协议栈BTStack框架代码阅读>. BLE协议在硬件上分为上下两部件:主机(Host,PC.单片机.Linux板).控制器(蓝牙模块),如下图所示…
本篇博客的学些要结合书籍<低功耗蓝牙开发权威指南,Robin Heydon著>第7章,实际上这书只是对蓝牙原版协议的简化.摘要. 回顾以前学过的<BLE协议各层的形象化理解>和<BLE协议各层数据格式概述> 一  链路层的5种状态: 就绪态(Stanby).扫描态(Scanning).广播态(Advertsing).发起态(Initiating).连接态(Connection). 扫描态有2种子状态:被动扫描(Passive Scanning).主动扫描(Active…
本篇博客根据韦大仙的视频,整理所得. 对于BLE系统,它分为上下两块.上面那一块,我们称为host主机.下面这一块是controller,你可以简单的认为它就是一个蓝牙芯片. 对于host这一块,它运行于linux android 单片机 ,它是纯软件的概念.它和蓝牙芯片之间通过usb口或串口来传输数据.那么对于host和controller中的各个层,它们是如何表示数据的呢?本篇博客就来讨论这个问题. 例子1: 打包: 甲公司A1想给乙公司A2'发送一封信,于是甲公司A1就构造了一个数据包:f…
本篇博客根据韦大仙视频,整理所得. 先上框图: ATT层 从ATT开始看,在上篇博客讲的医院结构里面有个检验室,检验室可以得到各项结果,但是它并不知道这些结果代表什么含义.类比的在BLE协议栈里面,ATT定义了各种属性.属性的操作方法,但是这些属性有什么作用,能给用户提供什么服务,它并不知道.举例如下:假设有两个蓝牙设备,一个是手机,一个是手环,此手环戴在手上可以监测心跳.在ATT这一层,手环提供数据,它是一个服务器.另一边的手机从手环获取数据,它是一个client. 在手环服务器这边,它定义了…
学习资料: 1. 蓝牙协议core_v5.0.pdf <Vol 2: Core System Package [BR/EDR Controller volume]>的“Part E: Host Controller Interface Functional Specification” 2. BTStack源码 对于被动扫描,周边的外设会给controller发送各种广播包,解析广播包,从而得到设备的信息. 对于主动扫描,除了被动的获得广播包外,controller还可以给某个设备发出扫描请求…
第14讲 | HTTP协议:看个新闻原来这么麻烦 http://www.163.com 是个 URL,叫作统一资源定位符. 之所以叫统一,是因为它是有格式的.HTTP 称为协议,www.163.com 是一个域名,表示互联网上的一个位置.有的 URL 会有更详细的位置标识,例如 http://www.163.com/index.html .正是因为这个东西是统一的,所以当你把这样一个字符串输入到浏览器的框里的时候,浏览器才知道如何进行统一处理. HTTP 请求的准备 浏览器会将 www.163.…
原文:Android零基础入门第14节:使用高速Genymotion,跨入火箭时代 无论是使用Eclipse,还是Android Studio,使用自带的Android模拟器,不仅很费电脑内存,模拟器开机和运行程序的速度很慢,严重影响开发效率.那么相信,通过本期的学习,可以完美的解决这个问题. Genymotion是一套完整的工具,它提供了Android虚拟环境,是开发者.测试人员.推销者甚至是游戏玩家的福音.Genymotion支持Windows.Linux和Mac OS等操作系统,容易安装和…
package com.jadyer.solrj; import java.util.ArrayList; import java.util.List; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; import org.apache.sol…
JAVA 类加载器 第14节 今天我们将类加载机制5个阶段中的第一个阶段,加载,又叫做装载.为了阅读好区分,以下都叫做装载. 装载的第一步就是要获得二进制的字节流,它可以从读.class文件获得,也可以从网络中接收别人发送的字节流.反正只要符合虚拟机规定的字节流格式都可以进入这个阶段. 有了字节流了之后,要进行装载还需要一个工具,那就是加载器了.加载器既可以使用系统提供的引导类加载器,也可以用户自己定义加载器,只需要继承ClassLoader,再重写loadClass()方法就可以实现一个自己的…
从这一节开始,以视频加源码的形式,后期视频和程序将放在链接中 资料链接 链接: https://pan.baidu.com/s/1jpHZjW_7pQKNfN9G4B6ZjA     密码:nhn3  注意:随着资料的增加,链接可能会失效,请在淘宝的资料介绍中找链接,如果淘宝的中的链接也失效了......联系卖家....   https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.32ad1deb4FypTm&id=56730982598…
usdt钱包开发 比特币协议 -> Omni 层协议 -> USDT USDT是基于比特币omni协议的一种代币: https://omniexplorer.info/asset/31 ID是31 Tether(USDT 的发行方)的官方钱包已关闭注册,无法注册钱包就无法获得 API Key,也就意味着无法实现类似基于钱包接口的开发方案,但我们可以基于 USDT 的底层协议(叫做 Omni 层协议)进行开发 1. Tether(USDT 的发行方)的官方钱包已关闭注册,无法注册钱包就无法获得…
这一篇主要围绕网络协议接口层的发送函数的解析 int dev_queue_xmit(struct sk_buff *skb) 函数解析 声明: /* include/linux/netdevice.h */ int dev_queue_xmit(struct sk_buff *skb); 定义: /* net/core/dev.c */ int dev_queue_xmit(struct sk_buff *skb) { return __dev_queue_xmit(skb, NULL); }…
Linux 网络设备驱动之网络协议接口层介绍. 网络协议接口层最主要的功能是给上层协议提供透明的数据包发送和接收接口. 当上层ARP或IP需要发送数据包时,它将调用网络协议接口层的dev_queue_xmit 函数发送该数据包, 同时还需要传递给改函数一个 struct sk_buff 数据结构的指针. dev_queue_xmit() 函数的原型为: int dev_queue_xmit(struct sk_buff *skb); 同样的,上层对数据包的接收也通过向 netif_rx() 函数…
第7.14节 Python类中的实例方法详析 一.    实例方法的定义 在本章前面章节已经介绍了类的实例方法,实例方法的定义有三种方式: 1.    类体中定义实例方法 第一种方式很简单,就是在类体中定义,所有在类中定义的方法默认是实例方法.定义实例方法与定义函数基本相同,只是Python要求实例方法的第一个形参必须为self,也就是实例对象本身,因此实例方法至少应该有一个self参数.关于self的说明,请大家参考老猿前面的章节<第7.5节 揭开Python类中self的面纱>.如下例子:…
版权声明:本文为博主原创文章,未经博主允许不得转载. 本节目标:        学习platform机制,如何实现驱动层分离 1.先来看看我们之前分析输入子系统的分层概念,如下图所示: 如上图所示,分层就是将一个复杂的工作分成了4层, 分而做之,降低难度,每一层专注于自己的事情, 系统只将其中的核心层和事件处理层写好了,所以我们只需要来写驱动层即可,接下来我们来分析platform机制以及分离概念 2.分离概念 优点: 将所有设备挂接到一个虚拟的总线上,方便sysfs节点和设备电源的管理 使得驱…
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Microsoft都有各自的网络协议,互不兼容,这就好比一群人有的说英语,有的说中文,有的说德语,说同一种语言的人可以交流,不同的语言之间就不行了. 为了把全世界的所有不同类型的计算机都连接起来,就必须规定一套全球通用的协议,为了实现互联网这个目标,互联网协议簇(Internet Protocol Suite…
网络协议是在内核中实现的,socket是对tcp/ip协议的系统调用,提供以下两点功能: 1. 将应用撑血数据从用户缓冲区中复制到TCP/UDP内核发送缓冲区,以交付内核发送来的数据(比如send),或者从内核TCP/UDP接受缓冲区中复制到用户缓冲区,以读取数据 2. 应用程序通过它们来修改内核中各层协议的某些头部信息或其他数据结构,从而精细地控制底层通信行为,比如setsockopt函数来设置ip数据包在网络上的存活时间 查看arp高速缓存 arp -a 删除arp缓存 arp -d ip地…
6.25自我总结 1.网络框架 1.单机 单机游戏 以下两个基于网络的 2.CS架构 cs--->client客户/server服务 服务端(应用程序)一个就够了,客户端(应用程序)可以有多个 服务端和客户端都是应用程序,那两者一定都可以存储数据,哪一个存储数据更好: 服务端: 很多人都可以用,它一次更新,其它人还是直接拿,还能保证数据的安全 客户端:非常快,如果本地保存账号密码,安全性非常低,客户端不联网,数据不更新 3.BS架构 bs--->browser浏览器/服务端 客户端(浏览器)/…
在上几篇博客中,形象的讲解了BLE各个层的作用,各个层的数据结构.本篇博客将研究BLE协议抓包.在实际开发中,有一个中央设备(central)和一个外设(Peripheral).所谓中央设备就是指它可以识别出周边的蓝牙设备,可以发起连接.所谓外设就是手环等.中央设备和外设之间传递数据,我们使用一个抓包工具sniffer,来抓取空中传递的数据,进而分析和调试.在实际开发中,抓包涉及的硬件框图如下: 但是在学习的过程中,使用下面的结构. 使用手机来模拟外设,在安卓手机上可以运行一个软件:com-bl…
如果要对csdn博文点赞,首先要登录CSDN,然后打开一篇需要点赞的文章,如<第14.1节 通过Python爬取网页的学习步骤>按<第14.3节 使用google浏览器获取网站访问的http信息>的方法在点赞文章页面通过F12调出开发者工具.此时回到打开博文页面对文章进行点赞,然后在开发者工具中去获取相关的http请求信息,可以看到内容如下: 可以看到,点赞时浏览器向服务端发送了一个http的get请求,请求的URL地址为: https://blog.csdn.net/laoyua…
一.编排业务逻辑的模式1. 事务脚本模式TS(The Transaction Script pattern ) TS模式概述     TS 鼓励你跳过任何的面向对象的设计,你直接到所需的用户操作的业务组件映射.专注于的业务用户可以通过表示层完成,并为每个请求编写方法.这个方法被称之为事务脚本,此处事务通常是指想要进行商业交易,脚本是指系统中的一系列关系用户操作的系统操作.     TS历时多年仍然不过时的原因只有一个:它基于推行可视化的业务逻辑设计,而可视化正上用户体验的核心.     在TS中…
一.SAX解析XML文档 SAX的全称是Simple APIs for XML,也即XML简单应用程序接口.与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式.当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口. 1. SAX解析原理: 加载一点,读取一点,处理一点.对内存要求比较低. SAX解析工具内置在jdk中:org.xml.sax.*…
博客地址; https://jspang.com/post/flutterDemo.html#toc-5b0 视频地址: https://www.bilibili.com/video/av39709290/?p=14 新建类: expansion_panel_list.dart 这是一个动态的widget 然后新建类,开和 和 打开,我们要做一个控制这个的类 声明两个List.一个int类型的List,为了生成数组 第二个数组是ExpandStateBean的List List<int> mL…
本节内容: 1:字符的定义 2:字符的方法 3: 转义字符 4:字符串简介 5:字符串方法 1:字符的定义 char与Unicode一一对应,一个char 2个字节. 2:字符的使用方法: 实例: static void Main() { char a = 'a'; '; char c = 'A'; if (char.IsLetter(a)){ //判断小写 Console.WriteLine("a是{0}小写,转大写是{1}", a, char.ToUpper(a)); } if (…
对于软件的人来说,物理层关注的内容会少一点.在前面的博客中,我们以快递员类比物理层,对于快递员来说,道路千万条,这条不通换另外一条.对于物理层来说也是一样的,它有很多频率,这个频率有冲突了,将会切到另一个频率上面. 举例:深圳比较有两个比较出名的电台:105.7MHZ 和106.2MHZ 注意:当说105.7MHZ时,是指该频率的周围一段都属于105.7MHZ.对于106.2MHZ的频率也是这样的.记住,它并不仅仅指一个值.数据是在该频段范围内传输,数据并不是仅仅在105.7MHZ或106.2M…
一. object类内置方法__str__和函数str 类的内置方法__str__和内置函数str实际上实现的是同一功能,实际上str调用的就是__str__方法,只是调用方式不同,二者的调用语法如下: 实例对象. str() str(对象) 返回值为一个字符串对象,该字符串对象类似一种非正式的字符串表示,为什么说是" 非正式"呢,这是因为Python对这个返回值没有特殊要求,只要求是对用户信息好理解. 此方法因此通常被用于与最终用户交互时的显示信息,str 的意义是得到便于人们阅读的…