/* * DesfireManufacturingData.java * * Copyright (C) 2011 Eric Butler * * Authors: * Eric Butler * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ package com.codebutler.farebot.card.desfire; import android.os.Parcel; import android.os.Parcelable; import com.codebutler.farebot.Utils; import org.w3c.dom.Element; import java.io.ByteArrayInputStream; public class DesfireManufacturingData implements Parcelable { public final int hwVendorID; public final int hwType; public final int hwSubType; public final int hwMajorVersion; public final int hwMinorVersion; public final int hwStorageSize; public final int hwProtocol; public final int swVendorID; public final int swType; public final int swSubType; public final int swMajorVersion; public final int swMinorVersion; public final int swStorageSize; public final int swProtocol; public final int uid; public final int batchNo; public final int weekProd; public final int yearProd; public DesfireManufacturingData (byte[] data) { ByteArrayInputStream stream = new ByteArrayInputStream(data); hwVendorID = stream.read(); hwType = stream.read(); hwSubType = stream.read(); hwMajorVersion = stream.read(); hwMinorVersion = stream.read(); hwStorageSize = stream.read(); hwProtocol = stream.read(); swVendorID = stream.read(); swType = stream.read(); swSubType = stream.read(); swMajorVersion = stream.read(); swMinorVersion = stream.read(); swStorageSize = stream.read(); swProtocol = stream.read(); // FIXME: This has fewer digits than what's contained in EXTRA_ID, why? byte[] buf = new byte[7]; stream.read(buf, 0, buf.length); uid = Utils.byteArrayToInt(buf); // FIXME: This is returning a negative number. Probably is unsigned. buf = new byte[5]; stream.read(buf, 0, buf.length); batchNo = Utils.byteArrayToInt(buf); // FIXME: These numbers aren't making sense. weekProd = stream.read(); yearProd = stream.read(); } public static DesfireManufacturingData fromXml (Element element) { return new DesfireManufacturingData(element); } private DesfireManufacturingData (Element element) { hwVendorID = Integer.parseInt(element.getElementsByTagName("hw-vendor-id").item(0).getTextContent()); hwType = Integer.parseInt(element.getElementsByTagName("hw-type").item(0).getTextContent()); hwSubType = Integer.parseInt(element.getElementsByTagName("hw-sub-type").item(0).getTextContent()); hwMajorVersion = Integer.parseInt(element.getElementsByTagName("hw-major-version").item(0).getTextContent()); hwMinorVersion = Integer.parseInt(element.getElementsByTagName("hw-minor-version").item(0).getTextContent()); hwStorageSize = Integer.parseInt(element.getElementsByTagName("hw-storage-size").item(0).getTextContent()); hwProtocol = Integer.parseInt(element.getElementsByTagName("hw-protocol").item(0).getTextContent()); swVendorID = Integer.parseInt(element.getElementsByTagName("sw-vendor-id").item(0).getTextContent()); swType = Integer.parseInt(element.getElementsByTagName("sw-type").item(0).getTextContent()); swSubType = Integer.parseInt(element.getElementsByTagName("sw-sub-type").item(0).getTextContent()); swMajorVersion = Integer.parseInt(element.getElementsByTagName("sw-major-version").item(0).getTextContent()); swMinorVersion = Integer.parseInt(element.getElementsByTagName("sw-minor-version").item(0).getTextContent()); swStorageSize = Integer.parseInt(element.getElementsByTagName("sw-storage-size").item(0).getTextContent()); swProtocol = Integer.parseInt(element.getElementsByTagName("sw-protocol").item(0).getTextContent()); uid = Integer.parseInt(element.getElementsByTagName("uid").item(0).getTextContent()); batchNo = Integer.parseInt(element.getElementsByTagName("batch-no").item(0).getTextContent()); weekProd = Integer.parseInt(element.getElementsByTagName("week-prod").item(0).getTextContent()); yearProd = Integer.parseInt(element.getElementsByTagName("year-prod").item(0).getTextContent()); } private DesfireManufacturingData (Parcel parcel) { hwVendorID = parcel.readInt(); hwType = parcel.readInt(); hwSubType = parcel.readInt(); hwMajorVersion = parcel.readInt(); hwMinorVersion = parcel.readInt(); hwStorageSize = parcel.readInt(); hwProtocol = parcel.readInt(); swVendorID = parcel.readInt(); swType = parcel.readInt(); swSubType = parcel.readInt(); swMajorVersion = parcel.readInt(); swMinorVersion = parcel.readInt(); swStorageSize = parcel.readInt(); swProtocol = parcel.readInt(); uid = parcel.readInt(); batchNo = parcel.readInt(); weekProd = parcel.readInt(); yearProd = parcel.readInt(); } public void writeToParcel(Parcel parcel, int flags) { parcel.writeInt(hwVendorID); parcel.writeInt(hwType); parcel.writeInt(hwSubType); parcel.writeInt(hwMajorVersion); parcel.writeInt(hwMinorVersion); parcel.writeInt(hwStorageSize); parcel.writeInt(hwProtocol); parcel.writeInt(swVendorID); parcel.writeInt(swType); parcel.writeInt(swSubType); parcel.writeInt(swMajorVersion); parcel.writeInt(swMinorVersion); parcel.writeInt(swStorageSize); parcel.writeInt(swProtocol); parcel.writeInt(uid); parcel.writeInt(batchNo); parcel.writeInt(weekProd); parcel.writeInt(yearProd); } public int describeContents() { return 0; } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public DesfireManufacturingData createFromParcel(Parcel source) { return new DesfireManufacturingData(source); } public DesfireManufacturingData[] newArray(int size) { return new DesfireManufacturingData[size]; } }; }