Grundaufbau der App
[DHBWCampusApp.git] / app / src / main / java / de / dhbwloe / campusapp / nfcreader / cardreader / MagnaCartaReader.java
1 /*
2  * MagnaCartaReader.java
3  *
4  * Copyright (C) 2014 Jakob Wenzel
5  *
6  * Authors:
7  * Jakob Wenzel <jakobwenzel92@gmail.com>
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21  */
22
23 package de.dhbwloe.campusapp.nfcreader.cardreader;
24
25 import android.util.Log;
26
27 import com.codebutler.farebot.card.desfire.DesfireException;
28 import com.codebutler.farebot.card.desfire.DesfireProtocol;
29
30 import java.io.IOException;
31
32 public class MagnaCartaReader implements ICardReader {
33         private static final String TAG = MagnaCartaReader.class.getName();
34         @Override
35         public NfcCardData readCard(DesfireProtocol card) {
36                 final int appId = 0xF080F3;
37                 final int fileId = 2;
38
39                 //We don't want to use getFileSettings as they are doing some weird stuff with the fileType
40                 try {
41                         card.selectApp(appId);
42
43                         //For some reason we can't use getFileList either, because the card answers with an
44                         //authentication error
45
46                         byte[] data = card.readFile(fileId);
47
48                         int low = ((int) data[7]) & 0xFF;
49                         int hi = ((int) data[6]) & 0xFF;
50
51                         int value = hi<<8 | low;
52                         NfcCardData cardData = new NfcCardData();
53                         cardData.setUniqueId(card.getManufacturingData().uid);
54                         try {
55                                 cardData.appendNamedData("balance", cardData.intToBytes(value*10));
56                         } catch (IOException e) {
57                         }
58
59                         return cardData;
60
61                 } catch (DesfireException e) {
62                         Log.w(TAG, "Exception while reading tag");
63                         return null;
64                 }
65         }
66 }