地点:30教 5楼 男厕对面          *

时间:下午三点               *

天气:中雨                 *

状态:3                    *

*********************************************************

@brief:

  此书之前读过两遍,每次读的目的不同,本次读的目的是完成NFC考勤设备上位机的开发,主要实现P2P通信功能。

第一章NFC概述

  NFC设备:NFC设备、NFC读卡器、NFC标签。第一种主要是指集成了多种功能包括P2P、模拟卡、读取卡功能芯片的设备。后面两种是只有特定功能的设备,具有专用性。

  书中提到一句话:NFC设备即可以工作在主动模式也可以工作在被动模式,而读卡器只能工作在主动模式下,NFC标签只能工作在被动模式下。

  @note 上面一段话非常关键,短短的一句道出了NFC各种芯片电路板的工作模式,之前读的时候没有留意这个地方,所以在android api中提到的Initiator和target一直不解,这里的NFC设备有狭义的和广义的,广义的nfc设备是包含NFC阅读器和NFC读卡器以及NFC标签,狭义的NFC设备是指有NFC全功能的device。

  NFC通信原理是利用磁场的耦合,通信的设备都具有调制解调信号的功能,这个东东在PN532数据手册上有提到,调制解调是信号与系统课程的概念,不太了解不过不重要,只要知道无论是哪种NFC通讯方式,通讯设备都需要天线就行了。主动设备和被动设备的区别就在于谁提供磁场供能,基于这种区分方式又有主动通信模式和被动通信模式,主动通信模式是通信的两方都是主动设备,必须产生自己的RF场(专业名词好像叫RF field),这本书上讲P2P就是使用这种模式。

在第一章后面给出了NFC开发常用的网络资源,相当Nice啊。

google android API NFC Basics:

http://developer.android.com/guide/topics/connectivity/nfc/index.html

android.nfc:

http://developer.android.com/reference/android/nfc/package-sumary.html

android.nfc.tech:

http://developer.android.com/reference/android/nfc/tech/package-summary.html

不出意外,直接访问是打不开的,为什么呢因为被墙了,有VPN的小伙伴可以直接访问,没有的就别看了,洗洗睡了。0.0

还是能看的,不过要改下,前面的协议和主机名改为:https://developer.android.google.cn就可以正常访问啦。

第二章 NFC协议基础

  看名字就很难,但是协议往往又是通信的核心,头疼。

  NFC技术标准有四层,RF Layer ISO层、Mode Switch层、NFC Protocol(nfc 协议) 、App层,相关层的介绍相当专业啊,看不太懂。这段提到了一个名词NDEF nfc数据交换格式,在android系统中可以用于P2P,我在读android api关于主机卡模拟时看到一个APDU格式,也是NFC数据传输的格式,这两者有何联系?

NDEF协议:

  因为android的api中关于P2P通信有一个NDEF类,所有还是详细了解下。

  这里的“载荷内容必须被定义在一个NFC记录类型定义(RTD)文档中”,这句话我认为有问题,所要表述的意思是载荷的内容必须是RTD协议定义的格式内容。

NDEF格式这段文字描述有点乱,还是看图靠谱,前面说NDEF由一系列的Record记录组成,而记录又由Identifier+length+type+payload组成,这里的Identifier应该就是记录的首字节,通俗点讲就是类型定义字节(1byte)哦,里边定义了payload是不是首记录,载荷里边有无id,是短记录还是长记录,以及非常重要的TNF(3 bit)Type Name Dormat这三位指出Payload类型定义字节Type映射规则;length是Type Length、Payload length、ID length组成,不是单指Payload的长度。

前面说了TNF指明的是Type数值的对应Payload类型的映射关系。TNF的取值如上图所示,因为TNF是3位所以最多有8种选择,最后一种未定义。

当TNF=0x01的时候,Type取值对应的Payload类型在下面定义,RTD===Record Type Define

RTD:

  NFC定义的数据类型需要的载荷内容被定义在RTD文档中。

因为传输的格式未确定,所以在这里先粗看一遍,了解下。

这本书确实是本好书,总结了NFC通讯协议以及规范,但是讲得比较浅,可能是因为很早就出版的原因。需要深入学习NFC的话还是得去NFC FORM查看英文资料,当然也有可能是我基础太薄弱,觉得讲得浅,看不出门道。

直接跳到第四章android nfc api概述

  这部分内容是我迫切想要了解的内容,之前有看过一遍,但是印象不深,而且自己对于查看API编程的能力还是很薄弱。

   

这个NfcAdapter应该和蓝牙开发的BluetoothAdapter差不多,这个类是对NFC硬件的抽象,里边有很多对NFC硬件的操作方法。NdefMessage是NDEF(NFC Data Exchange Format)包的抽象,里面存放的是NFC通讯的数据,做完在测试风火轮的SMC532与Mi 8手机P2P通讯的时候用到一款NDEF Message send app,里边发送的数据格式就是前面提到的那些格式。

  emm,接口,这里回忆起以前学Java的时候,记得在学书中将Package打包哪章,自己总结的一个Package包往往包含类和抽象接口,是的接口都是抽象的,也就是在使用的时候我们必须要自己实现的函数。这里聊点题外话,到现在我都不懂接口调用的机制以及Java中抽象类抽象方法的使用,我现在的猜测是android系统这个东西,在遇到这些接口的触发条件的时候会去调用这个“函数”,过两天《thinking in Java》寄到再看一遍,实事是我已经看过两遍了(手动添加黑脸表情)。

  第一个接口看不懂什么意思,第二个接口是NFC设备(手机)检测到另一个NFC设备(NFC手机)就会调用这个接口,可以在这个接口发送消息通知用户检测到NFC设备。第三个接口是数据发送回调接口,就是在NDEF数据包发送成功后,调用这个方法,也可以在里边Thoast一个消息通知用户数据发送成功。

上面这个软件是国外那位大佬编的,格式就是NDEF数据格式。

还有一个构造方法是这样的

方法什么的查API吧。

简要看下andorid.nfc.tech包

《NFC开发实战详解》笔记的更多相关文章

  1. HTML+CSS笔记 CSS笔记集合

    HTML+CSS笔记 表格,超链接,图片,表单 涉及内容:表格,超链接,图片,表单 HTML+CSS笔记 CSS入门 涉及内容:简介,优势,语法说明,代码注释,CSS样式位置,不同样式优先级,选择器, ...

  2. CSS笔记--选择器

    CSS笔记--选择器 mate的使用 <meta charset="UTF-8"> <title>Document</title> <me ...

  3. HTML+CSS笔记 CSS中级 一些小技巧

    水平居中 行内元素的水平居中 </a></li> <li><a href="#">2</a></li> &l ...

  4. HTML+CSS笔记 CSS中级 颜色&长度值

    颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 语法: p{co ...

  5. HTML+CSS笔记 CSS中级 缩写入门

    盒子模型代码简写 回忆盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左. 语法: margin:10px 15p ...

  6. HTML+CSS笔记 CSS进阶再续

    CSS的布局模型 清楚了CSS 盒模型的基本概念. 盒模型类型, 我们就可以深入探讨网页布局的基本模型了.布局模型与盒模型一样都是 CSS 最基本. 最核心的概念. 但布局模型是建立在盒模型基础之上, ...

  7. HTML+CSS笔记 CSS进阶续集

    元素分类 在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素(又叫行内元素)和内联块状元素. 常用的块状元素有: <div>.<p>.<h1&g ...

  8. HTML+CSS笔记 CSS进阶

    文字排版 字体 我们可以使用css样式为网页中的文字设置字体.字号.颜色等样式属性. 语法: body{font-family:"宋体";} 这里注意不要设置不常用的字体,因为如果 ...

  9. HTML+CSS笔记 CSS入门续集

    继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代(标签). 语法: p{color:red;} <p> ...

  10. HTML+CSS笔记 CSS入门

    简介: </span>年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的<span>脚本解释程序</span>,作为ABC语言的一种继承. & ...

随机推荐

  1. EntityFramework Core是否可以映射私有属性呢?了解一下。

    前言 最近几天身体有点抱恙,说话都需要勇气,痛哭.今天简短的写一点探索性的内容,仅供了解,感谢您的阅读. EF Core映射私有属性 在EF 6.x系列中写过一篇文章可以映射私有属性,说明EF的灵活性 ...

  2. Educational Codeforces Round 61 (Rated for Div. 2)-C. Painting the Fence 前缀和优化

    题意就是给出多个区间,要求去掉两个区间,使得剩下的区间覆盖范围最大. 当然比赛的时候还是没能做出来,不得不佩服大佬的各种姿势. 当时我想的是用线段树维护区间和,然后用单点判0,维护区间间断个数.然后打 ...

  3. random使用方法

    random.random() 没有参数,选择0到1之间的随机浮点数 random.uniform(a, b) 生成指定范围内的随机浮点数如果a.b哪个大那个小都没关系,生成的都是在小的与大的之间的随 ...

  4. day08(字符编码,字符与字节,文件操作)

    一,复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int: int('10') | int('-10') | int('0') | float(' ...

  5. [蓝桥杯]2013蓝桥省赛B组题目及详解

    /*——————————————————————————————————————————————————————————— 题目:2013 高斯日记T-1 问题描述: 大数学家高斯有一个好习惯:无论如 ...

  6. jdk自带的监测cpu/内存、线程等信息的工具

    Jvisualvm:jdk自带的监控工具(JDK1.6+) 在终端中输入Jvisualvm回车出现如下界面:

  7. 为Spring Cloud Ribbon配置请求重试(Camden.SR2+)

    当我们使用Spring Cloud Ribbon实现客户端负载均衡的时候,通常都会利用@LoadBalanced来让RestTemplate具备客户端负载功能,从而实现面向服务名的接口访问. 下面的例 ...

  8. 在windows环境利用celery实现简单的任务队列

    测试使用环境: 1.Python==3.6.1 2.MongoDB==3.6.2 3.celery==4.1.1 4.eventlet==0.23.0 Celery分为3个部分 (1)worker部分 ...

  9. 'cordova' 不是内部或外部命令,也不是可运行的程序

    问题: CMD   'cordova'  不是内部或外部命令,也不是可运行的程序: 解决:配置环境变量 1.找到npm的安装路径 :如C:\Users\AppData\Roaming\npm 2.环境 ...

  10. 洛谷P3380 二逼平衡树

    线段树+平衡树 我!又!被!卡!常!了! 以前的splay偷懒的删除找前驱后继的办法被卡了QAQ 放一个在洛谷开O2才能过的代码..我太菜了.. #include <bits/stdc++.h& ...