Vai al contenuto
Lingua: IT

Come si vede cosa si scambiano davvero un'applicazione e un tag?

Annotandolo tu: ogni comando mandato, ogni risposta ricevuta, con l'ora, dai due lati dell'interfaccia che avvolge le chiamate radio. Android tiene anche un registro del traffico con il proprio controller, filtrato di partenza. iOS non offre nulla di equivalente, solo errori.

Il registro che scrivi tu

Il registro che esiste sempre è quello che produce il tuo codice. Ogni comando in byte, ogni risposta in byte, l'eccezione quando c'è, e l'ora su ciascuno: basta questo per riprodurre uno scambio, contare le andate e ritorni e vedere dove un tag si è perso.

Sta nello stesso punto che la pagina delle prove raccomanda, intorno alle chiamate che toccano la radio, il che vuol dire che costa un posto nel codice invece di una riga per ogni chiamata. Tieni i byte in esadecimale e tienili interi: un registro troncato di uno scambio che fallisce non risponde a niente.

Il registro che tiene Android

La piattaforma tiene il suo. Il registro NCI di Android, nella pila NFC libera, conserva i pacchetti scambiati con il controller in una memoria circolare di 256 KB, nei due sensi, ciascuno con la sua ora, e il servizio la scarica su richiesta.

Due proprietà decidono cosa c'è dentro. La modalità, persist.nfc.snoop_log_mode, è filtrata a meno che non sia messa su completa, e una versione di sviluppo riversa anche la memoria in un file sotto /data/misc/nfc/logs. Su un telefono ordinario, quello che ottieni è quindi una vista filtrata; una versione di sviluppo mostra le trame.

Questo è il traffico del controller, non le chiamate della tua applicazione. Risponde a una domanda diversa, e a quella utile: se il comando che il tuo codice crede di aver mandato sia il comando che è uscito.

Quello che ti dà iOS

Core NFC segnala errori, non trame. L'elenco è abbastanza preciso per farci una diagnosi, una connessione persa, troppi tentativi, un tag che ha risposto con un errore, un pacchetto più lungo di quanto il tag accetti, una sessione invalidata sotto la chiamata, e la pagina dell'invalidazione copre il lato della sessione.

Quindi su iOS il registro che scrivi tu è tutto quello che c'è, il che è un argomento per scriverlo prima di averne bisogno.

Leggere quello che torna

Sappi cosa ogni protocollo mette in una risposta. Un'APDU finisce con due byte di stato, e 90 00 è l'unico che vuol dire andato a termine, cosa che la pagina delle APDU mette in tabella. Una risposta ISO 15693 si apre con un byte di contrassegni il cui bit più basso vuol dire errore, seguito da un codice, come descrive la pagina della 15693.

E leggi le ore, non solo i byte. Uno scarto di decine di millisecondi fra un comando e il successivo è il tuo codice che pensa, ed è la parte di un tocco lento su cui puoi intervenire.

Domande frequenti

Mi serve un analizzatore radio per vedere lo scambio?

Non per la maggior parte dei difetti. Un registro dei comandi e delle risposte che il tuo codice manda e riceve basta, e funziona su tutte e due le piattaforme.

Cosa contiene il registro di Android?

I pacchetti scambiati con il controller, in una memoria circolare, con l'ora nei due sensi, filtrati a meno che la modalità snoop non sia messa su completa.

C'è un equivalente su iOS?

No. Core NFC dà errori invece di trame, quindi su iOS il registro è quello che scrive l'applicazione.

Cosa deve annotare il registro?

I byte mandati, i byte ricevuti, l'eccezione se c'è, e l'ora su ogni riga, interi invece che troncati.