public static ReadWithoutEncryptionResponse Read(NfcF nfcf) { var targetSystemCode = new byte[2] { (byte)0x00, (byte)0x03 }; // [1] var poolingCommand = new PollingCommand(targetSystemCode); var pooolingRequest = poolingCommand.RequestPacket(); var rawPoolingResponse = nfcf.Transceive(pooolingRequest); var poolingResponse = new PoolingResponse(rawPoolingResponse); var targetIdm = poolingResponse.IDm(); var serviceCode = new byte[2] { (byte)0x0f, (byte)0x09 }; // [2] var requestServiceCommand = new RequestServiceCommand(targetIdm, serviceCode); var requestServiceRequest = requestServiceCommand.RequestPacket(); var rawRequestServiceResponse = nfcf.Transceive(requestServiceRequest); var requestServiceResponcse = new RequestServiceResponse(rawRequestServiceResponse); // [3] var requestCommandRireki = new ReadWithoutEncryptionCommandRireki(); var requestCommandPacket = requestCommandRireki.RequestPacket(targetIdm, 10); var rawReadWithoutEncryptionCommandRireki = nfcf.Transceive(requestCommandPacket); var retData = new ReadWithoutEncryptionResponse(rawReadWithoutEncryptionCommandRireki); return(retData); }
private static async Task <RequestServiceResponse> RequestService( this IFelicaCardMedia felicaCard, byte[] idm, byte blockNumber, byte[] blockList) { byte[] commandDataPrefix = new byte[] { 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, blockNumber, // block list }; for (int i = 0; i < idm.Length; i++) { commandDataPrefix[i + 2] = idm[i]; } byte[] commandData = new byte[commandDataPrefix.Length + blockList.Length]; Array.Copy(commandDataPrefix, commandData, commandDataPrefix.Length); Array.Copy(blockList, 0, commandData, commandDataPrefix.Length, blockList.Length); commandData[0] = (byte)commandData.Length; for (int i = 0; i < RetryMaxCount; i++) { byte[] result = await felicaCard.Send(commandData); if (result.Length > 0) { return(RequestServiceResponse.ParsePackage(result)); } } return(RequestServiceResponse.ParsePackage(new byte[0])); }