为了确保并首先澄清一下,Smartwatch 3的NFC只是一个嵌入式标签,还是理论上功能齐全的NFC芯片?
希望它不仅仅是一个标签,我们想……
我终于抓住了其中一款智能手表。这是我到目前为止所发现的。
将SWR50扫描为标签:
SWR50被识别为Broadcom制造的NFC论坛类型2标签。我测试的手表的7字节UID是 2e020d00000000 。两者,我无法从Broadcom找到任何专用的Type 2标签和UID中的多个零,这让我觉得这可能是使用某些NFC控制器模拟的标签。
2e020d00000000
标签有122个块(总共4个字节,总共488个字节),包含以下数据:
0: 2e 02 0d 0c 1: 00 00 00 00 2: 00 00 ff ff 3: e1 11 3c 0f 4: 00 00 00 01 5: 03 78 30 35 6: 03 31 d4 0f 7: 1f 61 6e 64 8: 72 6f 69 64 9: 2e 63 6f 6d 10: 3a 70 6b 67 11: 63 6f 6d 2e 12: 67 6f 6f 67 13: 6c 65 2e 61 14: 6e 64 72 6f 15: 69 64 2e 77 16: 65 61 72 61 17: 62 6c 65 2e 18: 61 70 70 fe 19: ff ff ff ff 20: 30 a8 db f2 21: 43 1c ff ff 22: 30 a8 db f5 23: 2a 78 ff ff 24: 14 39 2d 4d 25: f2 6a 91 40 26: ff ff ff ff 27: ff ff ff ff (remaining blocks are all filled with ff ff ff ff)
静态锁定位(块2,字节2和3)全部置位(表示锁定状态)。
块3包含类型2标记的能力容器(魔术字节 0xE1 )。
0xE1
但是,映射版本号为1.1( 0x11 ) 的 不 强> 遵守NFC论坛提供的任何当前地图版本文档!当前定义的唯一映射版本号是1.0。
0x11
块4包含3个NULL TLV( 0x00 )和锁定控制TLV的第一个字节(标记 0x01 )。
0x00
0x01
锁定控制TLV指示从字节位置232开始有48个锁定位(= 7 * 2 五 + 8)。即从块58开始的6个字节,所以它们都被设置( 0xFFFFFFFFFFFF )。每个锁定位锁定3个字节,因此它们指示块16到51被锁定。
0xFFFFFFFFFFFF
块6包含NDEF消息TLV(标记的开头) 0x03 , 长度 0x31 )。 NDEF消息由单个NDEF记录组成(适用于app.google.android.wearable.app的Android应用程序记录):
0x03
0x31
+--------------------------------------------+ | TNF: EXTERNAL TYPE | | Type: urn:nfc:ext:android.com:pkg | +--------------------------------------------+ | Payload: com.google.android.wearable.app | +--------------------------------------------+
块18包含终结者TLV(标记 0xFE )指示标签存储区内的最后一个TLV块。
0xFE
块20和21(前2个字节)包含设备蓝牙地址。
块22和23(前2个字节)包含看起来像蓝牙地址的东西。
块24和25包含设备序列号。
其余的块都填满了 FF FF FF FF 。
FF FF FF FF
Android NFC API访问:
请求NFC适配器的实例失败( getDefaultAdapter() 方法返回null):
getDefaultAdapter()
NfcManager nfcMgr = (NfcManager)mContext.getSystemService(Context.NFC_SERVICE); NfcAdapter nfcAdapter = nfcMgr.getDefaultAdapter(); // -> null
此外,还有一条日志消息,表明该设备不支持NFC。
V/NFC: this device does not have NFC support
查看NFC系统功能,NFC系统功能均不可用:
PackageManager pkgMgr = mContext.getPackageManager(); boolean featureNfc = pkgMgr.hasSystemFeature("android.hardware.nfc"); // -> false boolean featureHce = pkgMgr.hasSystemFeature("android.hardware.nfc.hce"); // -> false
都 featureNfc 和 featureHce 是 false ,所以android.hardware.nfc和android.hardware.nfc.hce都没有。
featureNfc
featureHce
false
的 因此,目前SWR50上没有可用的NFC API。 强>
固件分析:
所以那里 威力 从硬件端和内核端支持NFC,但缺少NFC堆栈的用户空间部分。虽然内核驱动程序可能也指向无处。并且BCM43341的固件可能以NFC控制器简单模拟Type 2标签的方式进行编码,同时无法从操作系统访问。
智能手表支持NFC,基于此处的规格 http://www.smartwatchspecifications.com/Device/smartwatch-3-swr50/ ,但目前还没有NFC API,希望会有一个,我也在寻找这个功能,计划开发具有此功能的应用程序
不。它表示NFC适用于规格表上的电源或配对。看起来不像第三方开发者这次会对它进行破解。
SmartWatch 3中有一个功能齐全的芯片。它现在按照CM787链接的规范进行操作( 这是一个新的 因为旧的似乎死了)。
当Android Wear正式扩展对NFC的支持时,SmartWatch 3将能够跟随。