/// <summary> /// Read card details commands /// </summary> /// <returns> /// returns Desfire CardDetails object /// </returns> public async Task <CardDetails> ReadCardDetailsAsync() { desfireCommand.Command = (byte)DesfireCommand.CommandType.GetVersion; desfireCommand.Data = null; DesfireResponse desfireRes = await connectionObject.TransceiveAsync(desfireCommand) as DesfireResponse; if (!desfireRes.SubsequentFrame || desfireRes.ResponseData.Length != 7) { return(null); } CardDetails card = new CardDetails(); card.HardwareVendorID = desfireRes.ResponseData[0]; card.HardwareType = desfireRes.ResponseData[1]; card.HardwareSubType = desfireRes.ResponseData[2]; card.HardwareMajorVersion = desfireRes.ResponseData[3]; card.HardwareMinorVersion = desfireRes.ResponseData[4]; card.HardwareStorageSize = desfireRes.ResponseData[5]; card.HardwareProtocolType = desfireRes.ResponseData[6]; desfireCommand.Command = (byte)DesfireCommand.CommandType.GetAdditionalFrame; desfireRes = await connectionObject.TransceiveAsync(desfireCommand) as DesfireResponse; if (!desfireRes.SubsequentFrame || desfireRes.ResponseData.Length != 7) { // Not expected return(null); } card.SoftwareVendorID = desfireRes.ResponseData[0]; card.SoftwareType = desfireRes.ResponseData[1]; card.SoftwareSubType = desfireRes.ResponseData[2]; card.SoftwareMajorVersion = desfireRes.ResponseData[3]; card.SoftwareMinorVersion = desfireRes.ResponseData[4]; card.SoftwareStorageSize = desfireRes.ResponseData[5]; card.SoftwareProtocolType = desfireRes.ResponseData[6]; desfireRes = await connectionObject.TransceiveAsync(desfireCommand) as DesfireResponse; if (!desfireRes.Succeeded || desfireRes.ResponseData.Length != 14) { // Not expected return(null); } card.UID = new byte[7]; System.Buffer.BlockCopy(desfireRes.ResponseData, 0, card.UID, 0, 7); card.GUID = desfireRes.ResponseData[7]; card.ProductionBatchNumber = new byte[5]; System.Buffer.BlockCopy(desfireRes.ResponseData, 7, card.ProductionBatchNumber, 0, 5); card.WeekOfProduction = desfireRes.ResponseData[12]; card.YearOfProduction = desfireRes.ResponseData[13]; return(card); }
/// <summary> /// Read card details commands /// </summary> /// <returns> /// returns Desfire CardDetails object /// </returns> public async Task<CardDetails> ReadCardDetailsAsync() { desfireCommand.Command = (byte) DesfireCommand.CommandType.GetVersion; desfireCommand.Data = null; DesfireResponse desfireRes = await connectionObject.TransceiveAsync(desfireCommand) as DesfireResponse; if (!desfireRes.SubsequentFrame || desfireRes.ResponseData.Length != 7) { return null; } CardDetails card = new CardDetails(); card.HardwareVendorID = desfireRes.ResponseData[0]; card.HardwareType = desfireRes.ResponseData[1]; card.HardwareSubType = desfireRes.ResponseData[2]; card.HardwareMajorVersion = desfireRes.ResponseData[3]; card.HardwareMinorVersion = desfireRes.ResponseData[4]; card.HardwareStorageSize = desfireRes.ResponseData[5]; card.HardwareProtocolType = desfireRes.ResponseData[6]; desfireCommand.Command = (byte)DesfireCommand.CommandType.GetAdditionalFrame; desfireRes = await connectionObject.TransceiveAsync(desfireCommand) as DesfireResponse; if (!desfireRes.SubsequentFrame || desfireRes.ResponseData.Length != 7) { // Not expected return null; } card.SoftwareVendorID = desfireRes.ResponseData[0]; card.SoftwareType = desfireRes.ResponseData[1]; card.SoftwareSubType = desfireRes.ResponseData[2]; card.SoftwareMajorVersion = desfireRes.ResponseData[3]; card.SoftwareMinorVersion = desfireRes.ResponseData[4]; card.SoftwareStorageSize = desfireRes.ResponseData[5]; card.SoftwareProtocolType = desfireRes.ResponseData[6]; desfireRes = await connectionObject.TransceiveAsync(desfireCommand) as DesfireResponse; if (!desfireRes.Succeeded || desfireRes.ResponseData.Length != 14) { // Not expected return null; } card.UID = new byte[7]; System.Buffer.BlockCopy(desfireRes.ResponseData, 0, card.UID, 0, 7); card.ProductionBatchNumber = new byte[5]; System.Buffer.BlockCopy(desfireRes.ResponseData, 7, card.ProductionBatchNumber, 0, 5); card.WeekOfProduction = desfireRes.ResponseData[12]; card.YearOfProduction = desfireRes.ResponseData[13]; return card; }