android nfc tag3 调试日记
又到了每天最愉快的调试android nfc模块的时候。nfcpy中有一段示例代码:listen.py
大致是模拟nfc tag3卡片。里面对pmm(设备号),idm(tag编号)进行设置然后发包。
查阅tag3 spec,发现:
ndef detection:
step1:
nfc forum device sends a polling command with system code 12fc,
ndef-enabled type 3 tag respond to the polling command by sending a polling response
include ing IDm and Pmm
我们得出结论:对pmm和idm进行解析的部分很可能是NDEF detection的部分,我们如何找到对应的源码呢?
直接在源码中搜索pmm,找到一处:RW_T3tDetectNDef。于是我们就找到了T3tDetectNDef。
继续研究,该函数是如何被调用的呢?
放到gdb中调试:对其下断点,打印函数调用如下:
RW_T3tDetectNDef
nfa_rw_detect_ndef
nfa_rw_handle_op_req
nfa_rw_handle_event
nfa_sys_event
nfc_task
gki_task_entry
很好,我们发现函数调用栈跨越了多个模块,自地向上下断点验证:
发现将nfc发射器放到手机附近时没有在gki_task_entry处断下,说明在在上方必定有一处循环:果然在nfc_task处
有while(true)
循环。今天的调试任务到此为止,开始分析源码,美滋滋。