最近正在开发公司的android平台,需要提供NFC读写应用接口。本文章是通过修改android平台源码,在不修改libnfc-nxp.conf文件的前提下,增加本机模拟卡ID的读写方法,使第三方app无障碍进行ID操作。
1.NFC简介:
Near Field Communication 近场通信,是一种数据传输技术。
与wifi、蓝牙、红外线等数据传输技术的一个主要差异就是有效距离一般不能超过4cm。
NFC支持3种工作模式:读卡器模式;仿真卡模式;点对点模式;
仿真卡模式:是将支持NFC的手机或其他电子设备当成借记卡、信用卡、公交卡、门禁卡等IC卡使用;基本原理是将相应的IC卡中的信息(支付凭证)封装成数据包存储在支持NFC的手机中,在使用时还需要一个NFC射频器(相当于刷传统IC卡时使用的刷卡器),将手机靠近NFC射频器,手机就会收到NFC射频器发过来的信号,在通过一系列复杂的验证后,将IC卡的相应信息传入NFC射频器,最后这些IC卡数据会传入NFC射频器连接的计算机,并进行相应的处理(如电子转账、开门等操作)。
2.基于NXP pn548模拟小区门禁卡
小区门禁比较简单,仅4个8bit数作为门禁ID。
NXP pn548的配置是存放在手机System/etc的libnf-nxp.conf文件中的NXP_CORE_CONF的LA_NFCID(33)项.
###############################################################################
# Core configuration settings
# It includes
# 18 - Poll Mode NFC-F: PF_BIT_RATE
# 21 - Poll Mode ISO-DEP: PI_BIT_RATE
# 28 - Poll Mode NFC-DEP: PN_NFC_DEP_SPEED
# 30 - Lis. Mode NFC-A: LA_BIT_FRAME_SDD
# 31 - Lis. Mode NFC-A: LA_PLATFORM_CONFIG
# 32 - Lis. Mode NFC/ISO-DEP: LA_SEL_INFO
# 33 - Lis. Mode NFC-A: LA_NFCID1
# 50 - Lis. Mode NFC-F: LF_PROTOCOL_TYPE
# 54 - Lis. Mode NFC-F: LF_CON_BITR_F
# 5B - Lis. Mode ISO-DEP: LI_BIT_RATE
# 60 - Lis. Mode NFC-DEP: LN_WT
# 80 - Other Param.: RF_FIELD_INFO
# 81 - Other Param.: RF_NFCEE_ACTION
# 82 - Other Param.: NFCDEP_OP
NXP_CORE_COnF={20, 02, 2E, 0E,
28, 01, 00,
21, 01, 00,
30, 01, 08,
31, 01, 03,
32, 01, 20,
38, 01, 01,
33, 04, 01, 02, 03, 04,
54, 01, 06,
50, 01, 00,
5B, 01, 00,
80, 01, 01,
81, 01, 01,
82, 01, 0E,
18, 01, 01
}
这个文件中33后,04表明长度为4个8bits数,01 02 03 04即为卡ID。
但由于本文件位于system/etc目录下,这个目录的所有文件都是只读的,只有root权限的进程才可以执行写操作,这个并不容易。还好我们有平台源码,下面我们来修改源码。
3.nxp模块初始化