Grundaufbau der App
[DHBWCampusApp.git] / app / src / main / java / com / codebutler / farebot / card / desfire / DesfireManufacturingData.java
1 /*
2  * DesfireManufacturingData.java
3  *
4  * Copyright (C) 2011 Eric Butler
5  *
6  * Authors:
7  * Eric Butler <eric@codebutler.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 com.codebutler.farebot.card.desfire;
24
25 import android.os.Parcel;
26 import android.os.Parcelable;
27 import com.codebutler.farebot.Utils;
28 import org.w3c.dom.Element;
29
30 import java.io.ByteArrayInputStream;
31
32 public class DesfireManufacturingData implements Parcelable {
33     public final int hwVendorID;
34     public final int hwType;
35     public final int hwSubType;
36     public final int hwMajorVersion;
37     public final int hwMinorVersion;
38     public final int hwStorageSize;
39     public final int hwProtocol;
40
41     public final int swVendorID;
42     public final int swType;
43     public final int swSubType;
44     public final int swMajorVersion;
45     public final int swMinorVersion;
46     public final int swStorageSize;
47     public final int swProtocol;
48
49     public final int uid;
50     public final int batchNo;
51     public final int weekProd;
52     public final int yearProd;
53
54     public DesfireManufacturingData (byte[] data) {
55         ByteArrayInputStream stream = new ByteArrayInputStream(data);
56         hwVendorID     = stream.read();
57         hwType         = stream.read();
58         hwSubType      = stream.read();
59         hwMajorVersion = stream.read();
60         hwMinorVersion = stream.read();
61         hwStorageSize  = stream.read();
62         hwProtocol     = stream.read();
63
64         swVendorID     = stream.read();
65         swType         = stream.read();
66         swSubType      = stream.read();
67         swMajorVersion = stream.read();
68         swMinorVersion = stream.read();
69         swStorageSize  = stream.read();
70         swProtocol     = stream.read();
71
72         // FIXME: This has fewer digits than what's contained in EXTRA_ID, why?
73         byte[] buf = new byte[7];
74         stream.read(buf, 0, buf.length);
75         uid = Utils.byteArrayToInt(buf);
76
77         // FIXME: This is returning a negative number. Probably is unsigned.
78         buf = new byte[5];
79         stream.read(buf, 0, buf.length);
80         batchNo = Utils.byteArrayToInt(buf);
81
82         // FIXME: These numbers aren't making sense.
83         weekProd = stream.read();
84         yearProd = stream.read();
85     }
86
87     public static DesfireManufacturingData fromXml (Element element) {
88         return new DesfireManufacturingData(element);
89     }
90
91     private DesfireManufacturingData (Element element) {
92         hwVendorID     = Integer.parseInt(element.getElementsByTagName("hw-vendor-id").item(0).getTextContent());
93         hwType         = Integer.parseInt(element.getElementsByTagName("hw-type").item(0).getTextContent());
94         hwSubType      = Integer.parseInt(element.getElementsByTagName("hw-sub-type").item(0).getTextContent());
95         hwMajorVersion = Integer.parseInt(element.getElementsByTagName("hw-major-version").item(0).getTextContent());
96         hwMinorVersion = Integer.parseInt(element.getElementsByTagName("hw-minor-version").item(0).getTextContent());
97         hwStorageSize  = Integer.parseInt(element.getElementsByTagName("hw-storage-size").item(0).getTextContent());
98         hwProtocol     = Integer.parseInt(element.getElementsByTagName("hw-protocol").item(0).getTextContent());
99
100         swVendorID     = Integer.parseInt(element.getElementsByTagName("sw-vendor-id").item(0).getTextContent());
101         swType         = Integer.parseInt(element.getElementsByTagName("sw-type").item(0).getTextContent());
102         swSubType      = Integer.parseInt(element.getElementsByTagName("sw-sub-type").item(0).getTextContent());
103         swMajorVersion = Integer.parseInt(element.getElementsByTagName("sw-major-version").item(0).getTextContent());
104         swMinorVersion = Integer.parseInt(element.getElementsByTagName("sw-minor-version").item(0).getTextContent());
105         swStorageSize  = Integer.parseInt(element.getElementsByTagName("sw-storage-size").item(0).getTextContent());
106         swProtocol     = Integer.parseInt(element.getElementsByTagName("sw-protocol").item(0).getTextContent());
107
108         uid      = Integer.parseInt(element.getElementsByTagName("uid").item(0).getTextContent());
109         batchNo  = Integer.parseInt(element.getElementsByTagName("batch-no").item(0).getTextContent());
110         weekProd = Integer.parseInt(element.getElementsByTagName("week-prod").item(0).getTextContent());
111         yearProd = Integer.parseInt(element.getElementsByTagName("year-prod").item(0).getTextContent());
112     }
113
114     private DesfireManufacturingData (Parcel parcel) {
115         hwVendorID     = parcel.readInt();
116         hwType         = parcel.readInt();
117         hwSubType      = parcel.readInt();
118         hwMajorVersion = parcel.readInt();
119         hwMinorVersion = parcel.readInt();
120         hwStorageSize  = parcel.readInt();
121         hwProtocol     = parcel.readInt();
122
123         swVendorID     = parcel.readInt();
124         swType         = parcel.readInt();
125         swSubType      = parcel.readInt();
126         swMajorVersion = parcel.readInt();
127         swMinorVersion = parcel.readInt();
128         swStorageSize  = parcel.readInt();
129         swProtocol     = parcel.readInt();
130
131         uid      = parcel.readInt();
132         batchNo  = parcel.readInt();
133         weekProd = parcel.readInt();
134         yearProd = parcel.readInt();
135     }
136
137     public void writeToParcel(Parcel parcel, int flags) {
138         parcel.writeInt(hwVendorID);
139         parcel.writeInt(hwType);
140         parcel.writeInt(hwSubType);
141         parcel.writeInt(hwMajorVersion);
142         parcel.writeInt(hwMinorVersion);
143         parcel.writeInt(hwStorageSize);
144         parcel.writeInt(hwProtocol);
145
146         parcel.writeInt(swVendorID);
147         parcel.writeInt(swType);
148         parcel.writeInt(swSubType);
149         parcel.writeInt(swMajorVersion);
150         parcel.writeInt(swMinorVersion);
151         parcel.writeInt(swStorageSize);
152         parcel.writeInt(swProtocol);
153
154         parcel.writeInt(uid);
155         parcel.writeInt(batchNo);
156         parcel.writeInt(weekProd);
157         parcel.writeInt(yearProd);
158     }
159
160     public int describeContents() {
161         return 0;
162     }
163
164     public static final Parcelable.Creator<DesfireManufacturingData> CREATOR = new Parcelable.Creator<DesfireManufacturingData>() {
165         public DesfireManufacturingData createFromParcel(Parcel source) {
166             return new DesfireManufacturingData(source);
167         }
168
169         public DesfireManufacturingData[] newArray(int size) {
170             return new DesfireManufacturingData[size];
171         }
172     };
173 }