Software

ÜberblickAndroid Logo

Die Software wurde für das Betriebssystem Android entworfen und in Java implementiert. Sie bildet die Schnittstelle zwischen dem Benutzer und der Hardware und ist hauptsächlich für das Handling der Bluetooth-Verbindung verantwortlich. Weiters liest diese auch NFC Karteninformationen aus (von Mifare und ISO14443 Karten) und ist in der Lage, diese zu beschreiben. Die Software ist funktionsfähig ab Android Version 2.3. Gingerbread.

Referenzhandbuch der Software

 

Graphical User Interface

Es werden insgesamt 4 Activities (Fenster) verwendet um die benötigte Funktionalität zu erreichen. Vom Startscreen kann zwischen Bluetoothgerät-Suche, NFC Karte lesen und schreiben und NFC Modus Änderung gewählt werden. Um von einer Karte zu lesen oder eine Karte zu beschreiben muss zuerst eine Verbindung zu einem Bluetoothgerät aufgebaut werden. Die nachfolgenden Screenshots zeigen einen typischen Ablauf vom Starten der App bis zum Beschreiben dieser.

Startscreen der App

Startscreen App

Bluetoothgeräte suchen

Bluetooth Geräte suchen

NFC Karte lesen

NFC Karte lesen

 

Informationen einer Mifare NFC Karte

Gelesene Karte

Beschreiben einer Mifare NFC Karte

Schreibmodus

 
 

Bluetooth VerbindungBluetooth Logo

Um sich zur Hardware zu verbinden, wird ein serieller RFCOMM Socket geöffnet, wobei das Androidgerät den Client und die Hardware den Server verkörpert. Das Androidgerät baut aktiv eine Verbindung zum Server auf, welcher auf eingehende Verbindungsanfragen reagiert. Die Geräte werden automatisch gepaart, es ist kein Passwort nötig um eine Verbindung aufzubauen. Die Verbindung wird im Hintergrund von einer Klasse verwaltet, welche den Bluetooth Socket zum Gerät, welches verbunden wird, öffnet und den aktuellen Bluetooth Status überwacht (verbunden, nicht verbunden, ...). Die Suche der verfügbaren Bluetoothgeräte und der eigentliche Verbindungsaufbau sind asynchron (in einem Thread ausgelagert).

 

Lesen/Schreiben einer NFC Karte

NFC LogoIn der Software wurden zwei verschiedene Kartentypen implementiert (Mifare-Karte und ISO14443A-Karte). Die jeweiligen Karten haben unterschiedliche Anforderungen an die GUI, da sie unterschiedlich strukturiert sind (Mifare-Karten in Sektoren und ISO14443A-Karten in Applikationen). Dies gilt für das Lesen wie für das Schreiben. Um dieses Problem in der GUI zu lösen wurde eine leere Containerview verwendet. Sobald die Karte gelesen wird, wird erkannt, um welchen Kartentyp es sich handelt und dynamisch die richtige View mit entsprechendem Inhalt angezeigt. Eine Karte kann nur beschrieben werden, nachdem sie gelesen wurde. Durch den Aufbau mit speziellen Views, die in die Activity geladen werden ist es auch relativ wenig Aufwand, weitere Kartentypen hinzuzufügen. Das Lesen und das Schreiben sind asynchron (in einem Thread ausgelagert).

 

Aufbau der Kommunikationsschnittstelle

Jede Schicht im Protokoll implementiert das Interface Streamable, wodurch die Schichten durch Komposition untereinander ausgetauscht, ersetzt oder erweitert werden. Die unterste Schicht in der Software bildet der BluetoothStream, welcher dann direkt mit dem Betriebssystem kommuniziert. Da die Karten unterschiedlich ausgelesen werden, werden diese durch eine gemeinsame Schnittstelle (Card) dargestellt, welche die Standard-Methoden, welche jede Karte unterstützen sollte (lesen, schreiben und die entsprechenden GUIs), bereitstellt. Die konkrete Implementierung findet dann in den Klassen MifareCard und ISO14443ACard statt.

Klassendiagramm Bluetooth Kommunikation

 

Ablauf beim Lesen einer NFC Karte

Das Sequenzdiagramm beschreibt einen typischen Ablauf zum Lesen einer Karte. In diesem Fall wird von einer Mifare Karte gelesen.

Mit dem Objekt ReaderWriterMode wird zuerst nach einer Karte gescannt. Mit der Antwort des PN532 kann ermittelt werden um welchen Typ von Karte es sich handelt. Je nach Kartentyp wird dann die konkrete Instanz dem Aufrufer zurückgegeben. Nun kann dieser mit den Methoden getReadView() oder getWriteView() die entsprechende View laden und die Karte auslesen.

Das Auslesen der Daten funktioniert immer in einem PN532InDataExchangeStream welcher die Daten in ein PN532 kompatibles Format bringt. Als erster Schritt muss bei den Mifare-Karten die Authentifizierung erfolgen. Der Default-Key ist in den meisten Fällen 0xFFFFFF. Danach kann mit dem Auslesen des Sektors begonnen werden. Hierzu sind vier Schreibzyklen erforderlich. Dieses Prozedere wiederholt sich für alle Sektoren einer Mifare-Karte.

NFC Ablaufdiagramm