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);
        }
Exemple #2
0
        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]));
        }