至少Broadcom的NFC控制器(例如在Nexus 5中使用)支持设置防冲突标识符(UID)、ATQA和SAK字节的任意值。然而,没有API可以更改它们,所以唯一的方法是修改libnfc-nci库。NFC-A的相关代码在文件
nfa_dm_discover.c中(从第322行开始)。
UINT8_TO_STREAM (p, NFC_PMID_LA_BIT_FRAME_SDD);
UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_BIT_FRAME_SDD);
UINT8_TO_STREAM (p, 0x04);
UINT8_TO_STREAM (p, NFC_PMID_LA_PLATFORM_CONFIG);
UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_PLATFORM_CONFIG);
UINT8_TO_STREAM (p, platform);
UINT8_TO_STREAM (p, NFC_PMID_LA_SEL_INFO);
UINT8_TO_STREAM (p, NCI_PARAM_LEN_LA_SEL_INFO);
UINT8_TO_STREAM (p, sens_info);
该代码当前设置ATQA(平台值和0x04的组合)和SAK字节(sens_info的值)。
为了更改在NFC-A防冲突期间使用的UID,您可以添加附加参数NFC_PMID_LA_NFCID1:
UINT8_TO_STREAM (p, NFC_PMID_LA_NFCID1);
UINT8_TO_STREAM (p, 4); // length of NFCID1 in bytes
UINT8_TO_STREAM (p, 0x12);
UINT8_TO_STREAM (p, 0x34);
UINT8_TO_STREAM (p, 0x56);
UINT8_TO_STREAM (p, 0x78);
您可以在这里找到一个更可定制的libnfc-nci版本(尽管仍在进行中)。