- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法区分NTAG213来自MF0ICU2基于其 UID、ATQA 或 SAK 值的标签?因为我必须对标签进行不同的编程(NTAG213 的 PWD/PACK 或 MF0ICU2 的 3DES),所以必须有一种方法可以调用一个或另一个方法。
不幸的是,Android 框架告诉我这两个标签都是 MifareUltralight
,类型为 TYPE_ULTRALIGHT_C
。 ATQA (0x0044
) 和 SAK (0x00
) 也是相同的。
其他应用程序,例如 NFC TagInfo by NXP可以告诉我标签的确切类型,所以我知道一定有某种方法。
最佳答案
一旦知道标签是 NXP 标签(UID 以 0x04 开头),您就会
首先发送一个 GET_VERSION 命令。如果此命令成功,则您知道标签是 EV1 或更高版本(MIFARE Ultralight EV1、NTAG21x)。否则,您可以假设它是第一代标签(MIFARE Ultralight、Ultralight C、NTAG203)。
如果标签是 EV1 标签,您可以继续分析对 GET_VERSION 命令的响应。这将揭示产品类型(NTAG 或 Ultralight EV1)以及产品子类型、产品版本和存储大小(这使您可以确定确切的芯片类型:
+------------+------+---------+-----------+--------------+| Chip | Type | Subtype | Version | Storage size |+------------+------+---------+-----------+--------------+| NTAG210 | 0x04 | 0x01 | 0x01 0x00 | 0x0B || NTAG212 | 0x04 | 0x01 | 0x01 0x00 | 0x0E || NTAG213 | 0x04 | 0x02 | 0x01 0x00 | 0x0F || NTAG213F | 0x04 | 0x04 | 0x01 0x00 | 0x0F || NTAG215 | 0x04 | 0x02 | 0x01 0x00 | 0x11 || NTAG216 | 0x04 | 0x02 | 0x01 0x00 | 0x13 || NTAG216F | 0x04 | 0x04 | 0x01 0x00 | 0x13 |+------------+------+---------+-----------+--------------+| NT3H1101 | 0x04 | 0x02 | 0x01 0x01 | 0x13 || NT3H1101W0 | 0x04 | 0x05 | 0x02 0x01 | 0x13 || NT3H2111W0 | 0x04 | 0x05 | 0x02 0x02 | 0x13 || NT3H2101 | 0x04 | 0x02 | 0x01 0x01 | 0x15 || NT3H1201W0 | 0x04 | 0x05 | 0x02 0x01 | 0x15 || NT3H2211W0 | 0x04 | 0x05 | 0x02 0x02 | 0x15 |+------------+------+---------+-----------+--------------+| MF0UL1101 | 0x03 | 0x01 | 0x01 0x00 | 0x0B || MF0ULH1101 | 0x03 | 0x02 | 0x01 0x00 | 0x0B || MF0UL2101 | 0x03 | 0x01 | 0x01 0x00 | 0x0E || MF0ULH2101 | 0x03 | 0x02 | 0x01 0x00 | 0x0E |+------------+------+---------+-----------+--------------+
If the tag is not an EV1 tag, you can send an AUTHENTICATE (part 1) command. If this command succeeds, you know that the tag is MIFARE Ultralight C. Otherwise, you can assume that the tag is either Ultralight or NTAG203.
In order to distinguish between MIFARE Ultralight and NTAG203, you can try to read pages that do not exist on Ultralight (e.g. read page 41).
You can send commands to the tag using the NfcA
or MifareUltralight
(if even available for the tag) tag technologies:
boolean testCommand(NfcA nfcA, byte[] command) throws IOException {
final boolean leaveConnected = nfcA.isConnected();
boolean commandAvailable = false;
if (!leaveConnected) {
nfcA.connect();
}
try {
byte[] result = nfcA.transceive(command);
if ((result != null) &&
(result.length > 0) &&
!((result.length == 1) && ((result[0] & 0x00A) == 0x000))) {
// some response received and response is not a NACK response
commandAvailable = true;
// You might also want to check if you received a response
// that is plausible for the specific command before you
// assume that the command is actualy available and what
// you expected...
}
} catch (IOException e) {
// IOException (including TagLostException) could indicate that
// either the tag is no longer in range or that the command is
// not supported by the tag
}
try {
nfcA.close();
} catch (Exception e) {}
if (leaveConnected) {
nfcA.connect();
}
return commandAvailable;
}
请注意,当标签不支持命令时,某些 NFC 堆栈会生成 IOException
(通常是 TagLostException
)。无论收到 NACK 响应还是针对不受支持的命令的 IOException
,您都应该在之后断开并重新连接标签,以便在继续发送其他命令之前重置标签的状态。
关于android - 区分NTAG213和MF0ICU2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37002498/
不确定是否可能,但只是想知道 CSS 中是否有一种方法来区分两种浏览器,即 IE6 和 IE8,因为我有一个我需要应用的样式,但 IE6 和 IE8 的值需要不同,即 ul.sf-menu li li
我正在为 C 库编写 C++ 抽象。 C 库有几个用于标识远程资源的 ID 的类型定义: typedef int color_id; typedef int smell_id; typedef int
有谁知道当以编程方式遍历 Word 文档时,您可以判断一个段落是否构成目录的一部分(或者实际上,构成字段一部分的任何其他内容)。 我提出这个问题的原因是我有一个 VB 程序,它应该从文档中提取前几段实
假设我的数据集包含三列:id(标识)、case(字符)和 value(数字)。这是我的数据集: tdata <- data.frame(id=c(1,1,1,1,2,2,2,2,3,3,3,3,4,4
我在解释 gcc (4.8.2) 警告和错误时遇到问题。更准确地说,很难分辨一个问题在哪里结束,另一个问题从哪里开始。我只能通过控制台访问构建机器,因此不能选择使用 IDE。 我真的需要能够快速区分个
我想创建一个泛型类型,它只从类定义中选择修饰的方法。 function test(ctor: any, methodName: any) {} class A { @test publ
是否有规范的 base-R 方法来确定函数参数是否是对象名称而不是文字/表达式? 虽然通常不鼓励使用 NSE,但偶尔会有人有一个好主意并想使用它。 data.frame 是我认为“方便”的最简单用例:
我已经实现了 didSelectRowAtIndexPath 和accessoryButtonTappedForRowWithIndexPath 似乎永远不会触发。但是,didSelectRowAtI
我需要确定数据框中的哪些列是小数,哪些是字符串。 使用 df.dtypes 为两种列类型提供“对象”: import pandas as pd import decimal data = {'dec1
有没有办法在 Vim 中区分隐藏缓冲区和事件缓冲区? 我需要确定窗口中的缓冲区是否处于事件状态,以便可以切换它。 尝试了 bufloaded、bufexists 和 buflisted,但它们对于事件
在 JavaScript 中区分事件的最佳方法是什么。 实际上有两点我感兴趣。第一点是事件中是否有类似 id 的东西(这对于调试目的非常有用)。另一点是有更好的方法来区分 mousedown 和 mo
我有一个 php 页面,里面有多个表单。 "> "> " value=""> " value=""> 这些表单是通过循环遍历 MySQL 上的所有数据而生成的。每个表单和输入都
Pony 有一个未参数化的异常值。 不幸的是,我经常有一些代码想要抛出不同类型的异常,并且我需要知道它们是什么,以便正确处理它们——例如,简单地说,当停止程序时,向用户提供以下信息很重要正确的错误消息
出于对所有神圣事物的热爱,您如何区分预定义的 .NET 异常类中的不同“异常风格”? 例如,一段代码可能会抛出 XmlException在以下条件下: 文档的根元素为NULL 文档中的字符无效 文档太
正如您在下面看到的,我创建了一个 JComboBox,其中“选项”数组中的元素作为列表中的选项。 当选择列表中的特定项目时,我想显示 JLabels“一个”或“两个”。例如。选择选项一显示“一”,选择
我有一个表,其中包含四列用户名、产品名称、产品价格和一个名为 item_paid 的 boolean 列。相同的产品名称可以作为重复条目插入到表中。但是有没有办法区分一行和重复行?或者我应该创建一个名
是否可以使用反射来区分仅 getter 属性和表达式主体属性? class MyClass { DateTime GetterOnly { get; } DateTime Expres
我即将为一个学校项目制作一个小程序,该程序应该能够识别通过 MIDI 钢琴输入演奏的和弦(这只是其中的一部分)。 目前为止,每次按下和每次释放 MIDI 键盘上的某个键,我都会得到一个 ShortMe
我正在使用“自动”反序列化器从 Kafka 消费 Avro 序列化消息,例如: props.put( ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFI
我需要从两个表中检索数据。第一个是事件列表,第二个是 field 列表。 我在两个表中都有一个同名的字段:events.venue(这是一个 ID),venues.venue 是地点的名称,比如“bl
我是一名优秀的程序员,十分优秀!