public List <Block> GetBlocks(long FromPosition, out ReadBlocksResult Feedback) { var Blocks = new List <Block>(); Action <Block> Execute = delegate(Block Block) { Blocks.Add(Block); }; Feedback = ReadBlocks(FromPosition, Execute, LenghtDataTrasmission); return(Blocks); }
// parameters: // one_reader_name 不能用通配符 // tag_type 如果 uid 为空,则 tag_type 应为 RFIDLIB.rfidlib_def.RFID_ISO15693_PICC_ICODE_SLI_ID // result.Value // -1 // 0 public GetTagInfoResult GetTagInfo(// byte[] uid, UInt32 tag_type string one_reader_name, InventoryInfo info, string style = "") { NormalResult result = GetReader(one_reader_name, out Reader reader); if (result.Value == -1) { return(new GetTagInfoResult(result)); } bool quick = StringUtil.IsInList("quick", style); // 锁定一个读卡器 LockReader(reader); try { #if DEBUG if (info != null) { Debug.Assert(info.UID.Length >= 8 || info.UID.Length == 0); } #endif // 2019/9/27 // 选择天线 int antenna_id = -1; // -1 表示尚未使用 if (info != null && reader.AntennaCount > 1) { antenna_id = (int)info.AntennaID; /* * var hr = rfidlib_reader.RDR_SetAcessAntenna(reader.ReaderHandle, * (byte)info.AntennaID); * if (hr != 0) * { * return new GetTagInfoResult * { * Value = -1, * ErrorInfo = $"4 RDR_SetAcessAntenna() error. hr:{hr},reader_name:{reader.Name},antenna_id:{info.AntennaID}", * ErrorCode = GetErrorCode(hr, reader.ReaderHandle) * }; * } */ } // 2019/11/20 if (info != null && info.UID == "00000000") { return(new GetTagInfoResult()); } var tagInfo = FindTagInfo(info?.UID, reader.Name); if (tagInfo == null) { return new GetTagInfoResult { Value = -1, ErrorInfo = "connectTag Error" } } ; #if NO UIntPtr hTag = _connectTag( reader.ReaderHandle, info?.UID, info == null ? RFIDLIB.rfidlib_def.RFID_ISO15693_PICC_ICODE_SLI_ID : info.TagType); if (hTag == UIntPtr.Zero) { return new GetTagInfoResult { Value = -1, ErrorInfo = "connectTag Error" } } ; #endif try { #if NO int iret; Byte[] uid = new Byte[8]; if (info != null && string.IsNullOrEmpty(info.UID) == false) { uid = Element.FromHexString(info.UID); //Debug.Assert(info.UID.Length >= 8); //Array.Copy(info.UID, uid, uid.Length); } Byte dsfid, afi, icref; UInt32 blkSize, blkNum; dsfid = afi = icref = 0; blkSize = blkNum = 0; iret = RFIDLIB.rfidlib_aip_iso15693.ISO15693_GetSystemInfo( reader.ReaderHandle, hTag, uid, ref dsfid, ref afi, ref blkSize, ref blkNum, ref icref); if (iret != 0) { return new GetTagInfoResult { Value = -1, ErrorInfo = $"ISO15693_GetSystemInfo() error 2. iret:{iret},reader_name:{one_reader_name},uid:{Element.GetHexString(uid)},antenna_id:{antenna_id}", ErrorCode = GetErrorCode(iret, reader.ReaderHandle) } } ; ReadBlocksResult result0 = ReadBlocks( reader.ReaderHandle, hTag, 0, blkNum, blkSize, true); if (result0.Value == -1) { return new GetTagInfoResult { Value = -1, ErrorInfo = $"{result0.ErrorInfo},antenna_id:{antenna_id}", ErrorCode = result0.ErrorCode } } ; NormalResult eas_result = new NormalResult(); if (quick == false) { eas_result = CheckEAS(reader.ReaderHandle, hTag); if (eas_result.Value == -1) { return new GetTagInfoResult { Value = -1, ErrorInfo = eas_result.ErrorInfo, ErrorCode = eas_result.ErrorCode } } ; } GetTagInfoResult result1 = new GetTagInfoResult { TagInfo = new TagInfo { // 这里返回真正 GetTagInfo 成功的那个 ReaderName。而 Inventory 可能返回类似 reader1,reader2 这样的字符串 ReaderName = one_reader_name, // 2019/2/27 UID = Element.GetHexString(uid), AFI = afi, DSFID = dsfid, BlockSize = blkSize, MaxBlockCount = blkNum, IcRef = icref, LockStatus = result0.LockStatus, // TagInfo.GetLockString(block_status), Bytes = result0.Bytes, EAS = eas_result.Value == 1, // AntennaID = info == null ? 0 : info.AntennaID // 2019/11/20 AntennaID = (uint)(antenna_id == -1 ? 0 : antenna_id), } }; return(result1); #endif return(new GetTagInfoResult { TagInfo = tagInfo }); } finally { #if NO _disconnectTag(reader.ReaderHandle, ref hTag); if (quick == false) { // 2019/11/18 尝试关闭射频 RFIDLIB.rfidlib_reader.RDR_CloseRFTransmitter(reader.ReaderHandle); } #endif } } finally { UnlockReader(reader); } }