示例#1
0
        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);
        }
示例#2
0
        // 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);
            }
        }