public static async Task <byte[]> DoFastRead( this INFCMiFareTag tag, byte from, byte to, byte batchSize) { var results = new List <MifareCommandResult>(); while (from < to) { var thisTo = (byte)Math.Min(from + batchSize, to); var data = await tag.SendMifareCommand(0x3a, from, thisTo); results.Add(data); from = (byte)(from + (byte)(batchSize + 0x1)); } if (results.Any(x => x.Error != null)) { throw new Exception($"Failed to fast read; first error: {results.First(x => x.Error != null).Error}"); } var all = MifareCommandResult.Combine(results); return(all.Data); }
public static Task <MifareCommandResult> SendMifareCommand( this INFCMiFareTag tag, params byte[] command) { var tcs = new TaskCompletionSource <MifareCommandResult>(); tag.SendMiFareCommand( NSData.FromArray(command), (data, err) => tcs.SetResult(MifareCommandResult.From(data, err))); return(tcs.Task); }