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); }
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])); }
/// <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)); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }