private void OnDetected(IFeliCaReader reader) { Idm.Value = string.Empty; Access.Value = null; Logs.Clear(); var idm = reader.ExecutePolling(0x0003); if (idm.Length == 0) { return; } var block = new ReadBlock { BlockNo = 0 }; if (!reader.ExecuteReadWoe(idm, 0x008B, block)) { return; } var blocks1 = Enumerable.Range(0, 8).Select(x => new ReadBlock { BlockNo = (byte)x }).ToArray(); var blocks2 = Enumerable.Range(8, 8).Select(x => new ReadBlock { BlockNo = (byte)x }).ToArray(); var blocks3 = Enumerable.Range(16, 4).Select(x => new ReadBlock { BlockNo = (byte)x }).ToArray(); if (!reader.ExecuteReadWoe(idm, 0x090F, blocks1) || !reader.ExecuteReadWoe(idm, 0x090F, blocks2) || !reader.ExecuteReadWoe(idm, 0x090F, blocks3)) { return; } Idm.Value = HexEncoder.ToHex(idm); Access.Value = Suica.ConvertToAccessData(block.BlockData); Logs.AddRange(blocks1.Concat(blocks2).Concat(blocks3) .Select(x => Suica.ConvertToLogData(x.BlockData)) .Where(x => x != null) .ToArray()); }