コード例 #1
0
        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);
        }
コード例 #2
0
        public static async Task <ReadWithoutEncryptionResponse> ReadWithoutEncryption(
            this IFelicaCardMedia felicaCard,
            byte[] idm,
            UInt16 serviceCode,
            byte blockNumber,
            byte[] blockList)
        {
            byte serviceCodeHigher = (byte)(serviceCode >> 8);
            byte serviceCodeLower  = (byte)(serviceCode & 0x00ff);

            byte[] commandDataPrefix = new byte[] {
                0x00,
                0x06,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x01,
                serviceCodeLower, serviceCodeHigher,
                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(ReadWithoutEncryptionResponse.ParsePacketData(result));
                }
            }

            return(ReadWithoutEncryptionResponse.ParsePacketData(new byte[0]));
        }
コード例 #3
0
        /// <summary>
        /// 利用履歴 (service code: 0x170f, block: max 6)
        /// 結果の解析の例
        /// </summary>
        /// <param name="idm"></param>
        /// <returns></returns>
        public async Task <UsageHistory> GetUsageHistory(byte[] idm)
        {
            ReadWithoutEncryptionResponse result = await base.ReadWithoutEncryption(idm, 0x170f, 0x01, new byte[] { 0x80, 0x00, });

            return(UsageHistory.GetUsageHistory(result.BlockData));
        }
コード例 #4
0
        /// <summary>
        /// 残額情報 (service code: 0x1317, block: 1)
        /// </summary>
        /// <param name="idm"></param>
        /// <returns></returns>
        public async Task <byte[]> GetBalance(byte[] idm)
        {
            ReadWithoutEncryptionResponse result = await base.ReadWithoutEncryption(idm, 0x1317, 0x01, new byte[] { 0x80, 0x00 });

            return(result.BlockData);
        }
コード例 #5
0
        /// <summary>
        /// 属性情報 (service code: 0x110b, block: 2)
        /// </summary>
        /// <param name="idm"></param>
        /// <returns></returns>
        public async Task <byte[]> GetAttribute(byte[] idm)
        {
            ReadWithoutEncryptionResponse result = await base.ReadWithoutEncryption(idm, 0x110b, 0x02, new byte[] { 0x80, 0x00, 0x80, 0x01 });

            return(result.BlockData);
        }
コード例 #6
0
        /// <summary>
        /// 料金 発券/改札記録 (service code: 0x184b, block: 1)
        /// </summary>
        /// <returns></returns>
        public async Task <byte[]> GetTicketIssueInspectRecord(byte[] idm)
        {
            ReadWithoutEncryptionResponse result = await base.ReadWithoutEncryption(idm, 0x184b, 0x01, new byte[] { 0x80, 0x00, });

            return(result.BlockData);
        }
コード例 #7
0
        /// <summary>
        /// SF入場駅記録 (service code: 0x10cb, block: 2)
        /// </summary>
        /// <returns></returns>
        public async Task <byte[]> GetSFEnteredStationInfo(byte[] idm)
        {
            ReadWithoutEncryptionResponse result = await base.ReadWithoutEncryption(idm, 0x10cb, 0x01, new byte[] { 0x80, 0x00, });

            return(result.BlockData);
        }
コード例 #8
0
        /// <summary>
        /// 改札入出場履歴 (service code: 0x108f, block: max 3)
        /// </summary>
        /// <returns></returns>
        public async Task <byte[]> GetTicketGateEnterLeaveHistory(byte[] idm)
        {
            ReadWithoutEncryptionResponse result = await base.ReadWithoutEncryption(idm, 0x108f, 0x01, new byte[] { 0x80, 0x00, });

            return(result.BlockData);
        }