Ejemplo n.º 1
0
        public int tag_inventory(
            PARAMETERS invenParams,
            UIntPtr hreader,
            Byte AIType,
            Byte AntennaSelCount,
            Byte[] AntennaSel,
            out List <UhfInventoryItem> results,
            // delegate_tag_report_handle tagReportHandler,
            ref UInt32 nTagCount)
        {
            results = new List <UhfInventoryItem>();

            int     iret;
            UIntPtr InvenParamSpecList = UIntPtr.Zero;

            InvenParamSpecList = RFIDLIB.rfidlib_reader.RDR_CreateInvenParamSpecList();
            if (InvenParamSpecList.ToUInt64() != 0)
            {
                /* set timeout */
                RFIDLIB.rfidlib_reader.RDR_SetInvenStopTrigger(InvenParamSpecList, RFIDLIB.rfidlib_def.INVEN_STOP_TRIGGER_TYPE_TIMEOUT, invenParams.m_timeout, 0);
                /* create ISO18000p6C air protocol inventory parameters */
                UIntPtr AIPIso18000p6c = RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_CreateInvenParam(InvenParamSpecList, 0, 0, RFIDLIB.rfidlib_def.ISO18000p6C_S0, RFIDLIB.rfidlib_def.ISO18000p6C_TARGET_A, RFIDLIB.rfidlib_def.ISO18000p6C_Dynamic_Q);
                if (AIPIso18000p6c.ToUInt64() != 0)
                {
                    //set selection parameters
                    if (invenParams.m_sel.m_enable)
                    {
                        Byte[] maskBits = invenParams.m_sel.m_maskBits.ToArray();
                        RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_SetInvenSelectParam(AIPIso18000p6c, invenParams.m_sel.m_target, invenParams.m_sel.m_action, invenParams.m_sel.m_memBank, invenParams.m_sel.m_pointer, maskBits, invenParams.m_sel.m_maskBitsLength, 0);
                    }
                    // set inventory read parameters
                    if (invenParams.m_read.m_enable)
                    {
                        RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_SetInvenReadParam(AIPIso18000p6c, invenParams.m_read.m_memBank, invenParams.m_read.m_wordPtr, (Byte)invenParams.m_read.m_wordCnt);
                    }

                    // Add Embedded commands
                    if (invenParams.m_write.m_enable)
                    {
                        Byte[] writeDatas = invenParams.m_write.m_datas.ToArray();

                        RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_CreateTAWrite(AIPIso18000p6c, invenParams.m_write.m_memBank, invenParams.m_write.m_wordPtr, invenParams.m_write.m_wordCnt, writeDatas, (UInt32)writeDatas.Length);
                    }

                    if (invenParams.m_lock.m_enable)
                    {
                        UInt16 mask, action;
                        mask = action = 0;
                        if (invenParams.m_lock.m_userMemSelected)
                        {
                            mask   |= 0x03;
                            action |= (UInt16)(invenParams.m_lock.m_userMem);
                        }
                        if (invenParams.m_lock.m_TIDMemSelected)
                        {
                            mask   |= (0x03 << 2);
                            action |= (UInt16)(invenParams.m_lock.m_TIDMem << 2);
                        }
                        if (invenParams.m_lock.m_EPCMemSelected)
                        {
                            mask   |= (0x03 << 4);
                            action |= (UInt16)(invenParams.m_lock.m_EPCMem << 4);
                        }
                        if (invenParams.m_lock.m_accessPwdSelected)
                        {
                            mask   |= (0x03 << 6);
                            action |= (UInt16)(invenParams.m_lock.m_accessPwd << 6);
                        }
                        if (invenParams.m_lock.m_killPwdSelected)
                        {
                            mask   |= (0x03 << 8);
                            action |= (UInt16)(invenParams.m_lock.m_killPwd << 8);
                        }

                        RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_CreateTALock(AIPIso18000p6c, mask, action);
                    }
                    // set meta flags
                    if (invenParams.m_metaFlags.m_enable)
                    {
                        UInt32 metaFlags = 0;
                        if (invenParams.m_metaFlags.m_EPC)
                        {
                            metaFlags |= RFIDLIB.rfidlib_def.ISO18000p6C_META_BIT_MASK_EPC;
                        }
                        if (invenParams.m_metaFlags.m_timestamp)
                        {
                            metaFlags |= RFIDLIB.rfidlib_def.ISO18000P6C_META_BIT_MASK_TIMESTAMP;
                        }
                        if (invenParams.m_metaFlags.m_frequency)
                        {
                            metaFlags |= RFIDLIB.rfidlib_def.ISO18000P6C_META_BIT_MASK_FREQUENCY;
                        }
                        if (invenParams.m_metaFlags.m_RSSI)
                        {
                            metaFlags |= RFIDLIB.rfidlib_def.ISO18000p6C_META_BIT_MASK_RSSI;
                        }
                        if (invenParams.m_metaFlags.m_readCnt)
                        {
                            metaFlags |= RFIDLIB.rfidlib_def.ISO18000P6C_META_BIT_MASK_READCOUNT;
                        }
                        if (invenParams.m_metaFlags.m_tagData)
                        {
                            metaFlags |= RFIDLIB.rfidlib_def.ISO18000P6C_META_BIT_MASK_TAGDATA;
                        }
                        RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_SetInvenMetaDataFlags(AIPIso18000p6c, metaFlags);
                    }
                    // set access password
                    if (invenParams.m_read.m_enable || invenParams.m_write.m_enable || invenParams.m_lock.m_enable)
                    {
                        RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_SetInvenAccessPassword(AIPIso18000p6c, invenParams.m_accessPwd);
                    }
                }
            }
            nTagCount = 0;
LABEL_TAG_INVENTORY:
            iret = RFIDLIB.rfidlib_reader.RDR_TagInventory(hreader, AIType, AntennaSelCount, AntennaSel, InvenParamSpecList);
            if (iret == 0 || iret == -21)
            {
                nTagCount += RFIDLIB.rfidlib_reader.RDR_GetTagDataReportCount(hreader);
                UIntPtr TagDataReport;
                TagDataReport = (UIntPtr)0;
                TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_FIRST); //first
                while (TagDataReport.ToUInt64() > 0)
                {
                    UInt32 aip_id    = 0;
                    UInt32 tag_id    = 0;
                    UInt32 ant_id    = 0;
                    Byte[] tagData   = new Byte[256];
                    UInt32 nSize     = (UInt32)tagData.Length;
                    UInt32 metaFlags = 0;

                    iret = RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_ParseTagReport(TagDataReport, ref aip_id, ref tag_id, ref ant_id, ref metaFlags, tagData, ref nSize);
                    if (iret == 0)
                    {
                        String writeOper = "";
                        String lockOper  = "";
                        if (invenParams.m_write.m_enable)
                        {
                            iret = RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_CheckTAWriteResult(TagDataReport);
                            if (iret != 0)
                            {
                                writeOper = "fail";
                            }
                            else
                            {
                                writeOper = "success";
                            }
                        }
                        if (invenParams.m_lock.m_enable)
                        {
                            iret = RFIDLIB.rfidlib_aip_iso18000p6C.ISO18000p6C_CheckTALockResult(TagDataReport);
                            if (iret != 0)
                            {
                                lockOper = "fail";
                            }
                            else
                            {
                                lockOper = "success";
                            }
                        }

                        /*
                         * object[] pList = { aip_id, tag_id, ant_id, metaFlags, tagData, nSize, writeOper, lockOper };
                         * Invoke(tagReportHandler, pList);
                         */
                        results.Add(new UhfInventoryItem
                        {
                            aip_id    = aip_id,
                            tag_id    = tag_id,
                            ant_id    = ant_id,
                            metaFlags = metaFlags,
                            tagData   = tagData,
                            nSize     = nSize,
                            writeOper = writeOper,
                            lockOper  = lockOper
                        });
                    }

                    // TODO: 观察读到的 bank 数据
                    // invenParams.m_read.m_wordPtr, (Byte)invenParams.m_read.m_wordCnt);


                    TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_NEXT); //next
                }
                if (iret == -21)                                                                                              // stop trigger occur,need to inventory left tags
                {
                    AIType = RFIDLIB.rfidlib_def.AI_TYPE_CONTINUE;                                                            //use only-new-tag inventory
                    goto LABEL_TAG_INVENTORY;
                }
                iret = 0;
            }
            if (InvenParamSpecList.ToUInt64() != 0)
            {
                RFIDLIB.rfidlib_reader.DNODE_Destroy(InvenParamSpecList);
            }
            return(iret);
        }
Ejemplo n.º 2
0
        public void DoInventory123()
        {
            Byte    AIType             = RFIDLIB.rfidlib_def.AI_TYPE_NEW;
            UIntPtr InvenParamSpecList = UIntPtr.Zero;

            InvenParamSpecList = RFIDLIB.rfidlib_reader.RDR_CreateInvenParamSpecList();
            if (InvenParamSpecList.ToUInt64() != 0)
            {
                RFIDLIB.rfidlib_aip_iso15693.ISO15693_CreateInvenParam(InvenParamSpecList, 0, enableAFI, AFI, 0);
            }

            DateTime startTime;
            DateTime endTime;
            TimeSpan t;

            //int iCount = 0;
            while (!_shouldStop)
            {
                startTime = DateTime.Now;
                // antenna selection

                /*if (iCount > antennaCount) { iCount = 0; }
                 * AntennaSel[0] = (Byte)(iCount + 1);
                 * AntennaSelCount = (Byte)1;
                 * iCount++;
                 */
                /*iCount = 0; // 0:天线1,1:天线2
                 * AntennaSel[0] = (Byte)(iCount + 1);
                 * AntennaSelCount = (Byte)1;
                 */


                UInt32 nTagCount = 0;
                int    iret;
LABEL_TAG_INVENTORY:
                iret = RFIDLIB.rfidlib_reader.RDR_TagInventory(hreader, AIType, AntennaSelCount, AntennaSel, InvenParamSpecList);
                if (iret == 0 || iret == -21)
                {
                    //object[] pList0 = { null, null };
                    object[] pList0 = { null, null, null };
                    Invoke(tagReportHandler123, pList0);

                    nTagCount = RFIDLIB.rfidlib_reader.RDR_GetTagDataReportCount(hreader);
                    //object[] pList1 = { "count", nTagCount.ToString()};
                    object[] pList1 = { "count", null, nTagCount.ToString() };
                    Invoke(tagReportHandler123, pList1);

                    UIntPtr TagDataReport;
                    TagDataReport = (UIntPtr)0;
                    TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_FIRST); //first

                    List <string> lstCurrRecvRfids = new List <string>();

                    Thread.Sleep(intInterval); //间隔多长时间读一次标签。

                    while (TagDataReport.ToUInt64() > 0)
                    {
                        UInt32 aip_id = 0;
                        UInt32 tag_id = 0;
                        UInt32 ant_id = 0;
                        Byte   dsfid  = 0;
                        Byte[] uid    = new Byte[16];
                        iret = RFIDLIB.rfidlib_aip_iso15693.ISO15693_ParseTagDataReport(TagDataReport, ref aip_id, ref tag_id, ref ant_id, ref dsfid, uid);
                        string uidStr = BitConverter.ToString(uid).Replace("-", string.Empty).Substring(0, 16);

                        lstCurrRecvRfids.Add(uidStr);

                        object[] pList = { uidStr, TagDataReport.ToUInt64().ToString(), null };
                        Invoke(tagReportHandler123, pList);

                        TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_NEXT); //next
                    }

                    funPostDataAndDisplayHtml(lstCurrRecvRfids);
                }
                if (iret == -21)                                   // stop trigger occur,need to inventory left tags
                {
                    AIType = RFIDLIB.rfidlib_def.AI_TYPE_CONTINUE; //use only-new-tag inventory
                    goto LABEL_TAG_INVENTORY;
                }
                iret = 0;
                // 计算消耗时间 -------------------------------------------
                endTime = DateTime.Now;
                t       = endTime - startTime;
                //object[] pList2 = { "耗时", t.TotalSeconds.ToString() + "   标签数量:" + nTagCount.ToString() };
                object[] pList2 = { "耗时", null, t.TotalSeconds.ToString() + "   标签数量:" + nTagCount.ToString() };
                Invoke(tagReportHandler123, pList2);
            }
            RFIDLIB.rfidlib_reader.RDR_ResetCommuImmeTimeout(hreader);
        }
Ejemplo n.º 3
0
        public void DoInventory()
        {
            Byte    AIType             = RFIDLIB.rfidlib_def.AI_TYPE_NEW;
            UIntPtr InvenParamSpecList = UIntPtr.Zero;

            InvenParamSpecList = RFIDLIB.rfidlib_reader.RDR_CreateInvenParamSpecList();
            if (InvenParamSpecList.ToUInt64() != 0)
            {
                RFIDLIB.rfidlib_aip_iso15693.ISO15693_CreateInvenParam(InvenParamSpecList, 0, enableAFI, AFI, 0);
            }

            DateTime startTime;
            DateTime endTime;
            TimeSpan t;


            while (!_shouldStop)
            {
                startTime = DateTime.Now;
                // antenna selection

                /*if (iCount > antennaCount) { iCount = 0; }
                 * AntennaSel[0] = (Byte)(iCount + 1);
                 * AntennaSelCount = (Byte)1;
                 * iCount++;
                 */
                /*iCount = 0; // 0:天线1,1:天线2
                 * AntennaSel[0] = (Byte)(iCount + 1);
                 * AntennaSelCount = (Byte)1;
                 */


                UInt32 nTagCount = 0;
                int    iret;
LABEL_TAG_INVENTORY:
                iret = RFIDLIB.rfidlib_reader.RDR_TagInventory(hreader, AIType, AntennaSelCount, AntennaSel, InvenParamSpecList);
                if (iret == 0 || iret == -21)
                {
                    object[] pList0 = { null, null };
                    Invoke(tagReportHandler, pList0);

                    nTagCount = RFIDLIB.rfidlib_reader.RDR_GetTagDataReportCount(hreader);
                    object[] pList1 = { "count", nTagCount.ToString() };
                    Invoke(tagReportHandler, pList1);

                    UIntPtr TagDataReport;
                    TagDataReport = (UIntPtr)0;
                    TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_FIRST); //first
                    while (TagDataReport.ToUInt64() > 0)
                    {
                        UInt32 aip_id = 0;
                        UInt32 tag_id = 0;
                        UInt32 ant_id = 0;
                        Byte   dsfid  = 0;
                        Byte[] uid    = new Byte[16];
                        iret = RFIDLIB.rfidlib_aip_iso15693.ISO15693_ParseTagDataReport(TagDataReport, ref aip_id, ref tag_id, ref ant_id, ref dsfid, uid);
                        if (iret == 0)
                        {
                            string uidStr = BitConverter.ToString(uid).Replace("-", string.Empty).Substring(0, 16);
                            if (cb_blockToRead.Checked || cb_blockToWrite.Checked)// 读写块数据
                            {
                                Byte addrMode = 1;
                                iret = RFIDLIB.rfidlib_aip_iso15693.ISO15693_Connect(hreader, RFIDLIB.rfidlib_def.RFID_ISO15693_PICC_ICODE_SLI_ID, addrMode, uid, ref hTag);
                                if (iret == 0)
                                {
                                    // 读块 -----------------------------------------------
                                    if (cb_blockToRead.Checked)
                                    {
                                        int    idx;
                                        UInt32 blockAddr;
                                        UInt32 blockToRead;
                                        UInt32 blocksRead = 0;

                                        idx       = 0;
                                        blockAddr = (UInt32)idx;
                                        //idx = 2; // 1 <= idx <= 8
                                        idx         = (int)nud_blockToRead.Value;
                                        blockToRead = (UInt32)(idx);

                                        UInt32 nSize;
                                        Byte[] BlockBuffer = new Byte[40];

                                        nSize = (UInt32)BlockBuffer.GetLength(0);
                                        UInt32 bytesRead = 0;
                                        iret = RFIDLIB.rfidlib_aip_iso15693.ISO15693_ReadMultiBlocks(hreader, hTag, 1, blockAddr, blockToRead, ref blocksRead, BlockBuffer, nSize, ref bytesRead);
                                        if (iret == 0)
                                        {
                                            // blocksRead: blocks read
                                            string   blockDataStr = BitConverter.ToString(BlockBuffer, 0, (int)bytesRead).Replace("-", string.Empty);
                                            object[] pList        = { uidStr, "R:" + blockDataStr };
                                            Invoke(tagReportHandler, pList);
                                        }
                                        else
                                        {
                                            object[] pList = { "error", iret.ToString() };
                                            Invoke(tagReportHandler, pList);
                                        }
                                    }
                                    // 写块 ------------------------------------------------
                                    if (cb_blockToWrite.Checked)
                                    {
                                        int    idx;
                                        UInt32 blkAddr;
                                        UInt32 numOfBlks;
                                        idx       = (int)nud_blockToWrite.Value;
                                        blkAddr   = (UInt32)idx;
                                        idx       = tb_blockToWrite.Text.Length / 8;
                                        numOfBlks = (UInt32)(idx + 1);
                                        byte[] newBlksData = StringToByteArrayFastest(tb_blockToWrite.Text + "00000000");

                                        iret = RFIDLIB.rfidlib_aip_iso15693.ISO15693_WriteMultipleBlocks(hreader, hTag, blkAddr, numOfBlks, newBlksData, (uint)newBlksData.Length);
                                        if (iret == 0)
                                        {
                                            object[] pList = { uidStr, "W:" + tb_blockToWrite.Text };
                                            Invoke(tagReportHandler, pList);
                                        }
                                        else
                                        {
                                            object[] pList = { "error", iret.ToString() };
                                            Invoke(tagReportHandler, pList);
                                        }
                                    }
                                    //-------------------------------------------------------
                                }
                                iret = RFIDLIB.rfidlib_reader.RDR_TagDisconnect(hreader, hTag);
                                if (iret == 0)
                                {
                                    hTag = (UIntPtr)0;
                                }
                            }
                            else// 不读写块数据
                            {
                                object[] pList = { uidStr, null };
                                Invoke(tagReportHandler, pList);
                            }
                        }
                        TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_NEXT); //next
                    }
                }
                if (iret == -21)                                   // stop trigger occur,need to inventory left tags
                {
                    AIType = RFIDLIB.rfidlib_def.AI_TYPE_CONTINUE; //use only-new-tag inventory
                    goto LABEL_TAG_INVENTORY;
                }
                iret = 0;

                // 计算消耗时间 -------------------------------------------
                endTime = DateTime.Now;
                t       = endTime - startTime;
                object[] pList2 = { "耗时", t.TotalSeconds.ToString() + "   标签数量:" + nTagCount.ToString() };
                Invoke(tagReportHandler, pList2);
            }
            RFIDLIB.rfidlib_reader.RDR_ResetCommuImmeTimeout(hreader);
        }
Ejemplo n.º 4
0
        public int tag_inventory(
            Byte AIType,
            Byte AntennaSelCount,
            Byte[] AntennaSel,
            ref UInt32 nTagCount)
        {
            int     iret;
            UIntPtr InvenParamSpecList = UIntPtr.Zero;

            InvenParamSpecList = RfidBLL.RDR_CreateInvenParamSpecList();
            if (InvenParamSpecList.ToUInt64() != 0)
            {
                /* set timeout */
                RfidBLL.RDR_SetInvenStopTrigger(InvenParamSpecList, 3, 100, 0);
                /* create ISO18000p6C air protocol inventory parameters */
                UIntPtr AIPIso18000p6c = RfidBLL.ISO18000p6C_CreateInvenParam(InvenParamSpecList, 0, 0, 0, 0x00, 0xff);
                if (AIPIso18000p6c.ToUInt64() != 0)
                {
                    if (result)
                    {
                        p = 0x01;//epc
                    }
                    else
                    {
                        p = 0x03;//uid 0x02 tid
                    }
                    /* set inventory read parameter for TID */
                    RfidBLL.ISO18000p6C_SetInvenReadParam(AIPIso18000p6c, (Byte)p, 0, 0);
                    /*only TID return */
                    UInt32 metaFlags = 0x20;
                    RfidBLL.ISO18000p6C_SetInvenMetaDataFlags(AIPIso18000p6c, metaFlags);
                }
            }
            nTagCount = 0;
LABEL_TAG_INVENTORY:
            try
            {
                iret = RfidBLL.RDR_TagInventory(hreader, AIType, AntennaSelCount, AntennaSel, InvenParamSpecList);

                if (iret == 0 || iret == -21)
                {
                    nTagCount += RfidBLL.RDR_GetTagDataReportCount(hreader);
                    UIntPtr TagDataReport;
                    TagDataReport = (UIntPtr)0;
                    TagDataReport = RfidBLL.RDR_GetTagDataReport(hreader, 0); //first
                    while (TagDataReport.ToUInt64() > 0)
                    {
                        UInt32 aip_id    = 0;
                        UInt32 tag_id    = 0;
                        UInt32 ant_id    = 0;
                        Byte[] tagData   = new Byte[256];
                        UInt32 nSize     = (UInt32)tagData.Length;
                        UInt32 metaFlags = 0;

                        iret = RfidBLL.ISO18000p6C_ParseTagReport(TagDataReport, ref aip_id, ref tag_id, ref ant_id, ref metaFlags, tagData, ref nSize);
                        if (iret == 0)
                        {
                            object[] pList = { aip_id, tag_id, ant_id, metaFlags, tagData, nSize, "", "" };

                            byte[] epc = new byte[12];
                            Array.Copy(tagData, 4, epc, 0, 12);
                            StringBuilder @string = new StringBuilder();
                            foreach (var temp in epc)
                            {
                                @string.Append(temp.ToString("X2"));
                            }

                            if (@string.ToString().Contains("E200680A8AA8"))//层架判断
                            {
                                result = false;
                            }
                            else if (result && !ServerConfig.EpcList.Contains(@string.ToString()))
                            {
                                ServerConfig.EpcList.Enqueue(@string.ToString());
                                result = true;
                            }
                            else if (result && !ServerConfig.EpcS.Contains(@string.ToString()))
                            {
                                ServerConfig.EpcS.Add(@string.ToString());
                                result = true;
                            }
                            else
                            {
                                result = true;
                            }
                            ///user判断
                            byte[] user = new byte[28];
                            Array.Copy(tagData, 0, user, 0, 28);
                            @string = new StringBuilder();
                            foreach (var temp in user)
                            {
                                @string.Append(temp.ToString("X2"));
                            }
                            if (@string.ToString().Contains("AA0CFFA5"))
                            {
                                //可用user
                                if (!ServerConfig.UserList.Contains(@string.ToString()))
                                {
                                    ServerConfig.UserList.Enqueue(@string.ToString());
                                }
                            }
                            //else if(p==0x03)
                            //{
                            //    result = false;
                            //    //保持最后一个epc为层架标签和最后一个user对应
                            //}
                        }
                        TagDataReport = RfidBLL.RDR_GetTagDataReport(hreader, 2); //next
                    }
                    if (iret == -21)                                              // stop trigger occur,need to inventory left tags
                    {
                        AIType = 2;                                               //use only-new-tag inventory
                        goto LABEL_TAG_INVENTORY;
                    }
                    iret = 0;
                }
                if (InvenParamSpecList.ToUInt64() != 0)
                {
                    RfidBLL.DNODE_Destroy(InvenParamSpecList);
                }
                return(iret);
            }
            catch {
                return(0);
            }
        }
Ejemplo n.º 5
0
        public HttpResponseMessage GetRFIDAPIReturn(string JsonRequest)
        {
            string returnValue             = String.Empty;
            IDictionary <int, string> dict = new Dictionary <int, string>();

            //解析方法名
            JObject Parameters   = JObject.Parse(JsonRequest);
            string  functionName = Parameters["functionName"].ToString();

            try
            {
                string RFID = "";

                switch (functionName)
                {
                case "reader_load":
                    status      = RDR_LoadReaderDrivers("");
                    returnValue = JsonConvert.SerializeObject(new { status = status.ToString(), error = errorMsg });
                    break;

                //这里也不需要先新建一个connection??
                case "rf_init_com":
                    //status = ReaderA.StaticClassReaderA.CloseComPort();
                    status = ReaderA.RWDev.CloseComPort();
                    //int port = Int32.Parse(Parameters["port"].ToString());
                    int           port       = 0;
                    StringBuilder portString = new StringBuilder(2);
                    int           baud       = Int32.Parse(Parameters["baud"].ToString());
                    //string configFilePath = System.Environment.CurrentDirectory + @"\resources\app.asar.unpacked\dist\electron\static\IVFMatchAPIs\config.ini";
                    //string configFilePath = Path.Combine(System.Environment.CurrentDirectory, "config.ini");
                    string configFilePath = @"C:\LabTrustConfig\config.ini";
                    GetPrivateProfileString("读卡器", "port", "", portString, 500, configFilePath);
                    port = Int32.Parse(portString.ToString());

                    if (port == 0)
                    {
                        fbaud = Convert.ToByte(baud / 19200 - 1);
                        for (port = 0; port < 18; port++)
                        {
                            //status = ReaderA.StaticClassReaderA.OpenComPort(port, ref readerAddr, fbaud, ref portIndex);
                            status = OpenComPort(port, ref readerAddr, fbaud, ref portIndex);
                            if (status == 0)
                            {
                                dict.Add(portIndex, "rongrui");
                                WritePrivateProfileString("读卡器", "port", port.ToString(), configFilePath);
                                break;
                            }

                            //添加安的读卡器的初始化
                            //
                        }
                    }
                    else if (port != -1)
                    {
                        status = OpenComPort(port, ref readerAddr, fbaud, ref portIndex);
                        if (status == 0)
                        {
                            dict.Add(portIndex, "rongrui");     //成功打开端口
                        }
                        else
                        {
                            WritePrivateProfileString("读卡器", "port", "0", configFilePath);     //打开失败则在配置文件中重置端口号为0,下次读取时,从0开始遍历端口号
                        }
                    }

                    status = RDR_LoadReaderDrivers("");
                    UInt32 nCount = HID_Enum("RL8000");
                    connStr = "RDType=RL8000;CommType=USB;AddrMode=1;SerNum=";
                    for (int i = 0; i < nCount; i++)
                    {
                        StringBuilder sernum = new StringBuilder();
                        sernum.Append('\0', 64);
                        UInt32 nSize;
                        nSize = (UInt32)sernum.Capacity;
                        int iret = HID_GetEnumItem((UInt32)i, 1, sernum, ref nSize);
                        if (iret == 0)
                        {
                            connStr = connStr + sernum.ToString();
                            status  = RDR_Open(connStr, ref hreader);
                            if (status == 0)
                            {
                                dict.Add((int)hreader, "andi");
                            }
                        }
                    }
                    UInt32 nnCount = HID_Enum("RD242");
                    connStr = "RDType=RD242;CommType=USB;AddrMode=1;SerNum=";
                    for (int i = 0; i < nnCount; i++)
                    {
                        StringBuilder sernum = new StringBuilder();
                        sernum.Append('\0', 64);
                        UInt32 nSize;
                        nSize = (UInt32)sernum.Capacity;
                        int iret = HID_GetEnumItem((UInt32)i, 1, sernum, ref nSize);
                        if (iret == 0)
                        {
                            connStr = connStr + sernum.ToString();
                            status  = RDR_Open(connStr, ref hreader);
                            if (status == 0)
                            {
                                dict.Add((int)hreader, "andi");
                            }
                        }
                    }
                    byte power = Convert.ToByte(7);
                    //status = ReaderA.RWDev.GetPwr(ref readerAddr, ref _Pwr, ref _PwrVal, portIndex);
                    status      = ReaderA.RWDev.SetPwr(ref readerAddr, ref power, portIndex);
                    Common.dict = dict;

                    if (dict.Count() == 0)
                    {
                        status      = -1;
                        errorMsg    = "设备未连接";
                        Common.dict = null;
                    }
                    else
                    {
                        status = 0;
                    }
                    returnValue = JsonConvert.SerializeObject(new { status = status.ToString(), error = errorMsg });
                    break;

                case "rf_light":
                    byte color = Convert.ToByte(Parameters["color"].ToString());
                    returnValue = JsonConvert.SerializeObject(new { status = status.ToString() });
                    break;

                case "rf_beep":
                    byte msec = Byte.Parse(Parameters["msec"].ToString());
                    returnValue = JsonConvert.SerializeObject(new { status = status.ToString() });
                    break;

                case "RF_Refresh_Cache":
                    Common.rfidDT.Clear();
                    break;

                case "ISO15693_Inventories":
                    var  rows         = Common.rfidDT.Select("TimeStamp < " + (MillisecNowCompute() - 2500).ToString());
                    bool foundNewRFID = false;
                    foreach (var row in rows)
                    {
                        row.Delete();
                    }
                    List <String> list             = new List <String>();
                    List <String> newFoundRFIDList = new List <String>();
                    dict = Common.dict;
                    try
                    {
                        foreach (KeyValuePair <int, string> item in dict)
                        {
                            if (item.Value == "rongrui")
                            {
                                portIndex = item.Key;
                                status    = Inventory(ref readerAddr, ref state, ref AFI, DSFIDAndUID, ref cardNumber, portIndex);
                                Array.Resize(ref DSFIDAndUID, cardNumber * 9);
                                strDSFIDAndUID = ByteArrayToHexString(DSFIDAndUID).Replace(" ", "");
                                for (int i = 0; i < cardNumber; i++)
                                {
                                    s    = strDSFIDAndUID.Substring(18 * i, 18);
                                    RFID = s.Substring(2, 16);
                                    list.Add(RFID);
                                }
                                status = (status == 14) ? 0 : status;
                                if (status != 0)
                                {
                                    status_rongrui = status;
                                    break;
                                }
                            }

                            else if (item.Value == "andi")
                            {
                                portIndex = item.Key;
                                UIntPtr hreader            = (UIntPtr)portIndex;
                                UIntPtr InvenParamSpecList = UIntPtr.Zero;
                                ISO15693_CreateInvenParam(InvenParamSpecList, 0, 0, 0, 0);
                                Byte[] antenna = new Byte[] { 1, 2, 3, 4 };
                                status = RDR_TagInventory(hreader, 1, 4, antenna, InvenParamSpecList);
                                UIntPtr TagDataReport;
                                TagDataReport = (UIntPtr)0;
                                TagDataReport = RDR_GetTagDataReport(hreader, 1);
                                while (TagDataReport.ToUInt64() > 0)
                                {
                                    UInt32 aip_id = 0;
                                    UInt32 tag_id = 0;
                                    UInt32 ant_id = 0;
                                    Byte   dsfid  = 0;
                                    Byte   uidlen = 0;
                                    Byte[] uid    = new Byte[16];

                                    int iret = ISO15693_ParseTagDataReport(TagDataReport, ref aip_id, ref tag_id, ref ant_id, ref dsfid, uid);
                                    uid = uid.Take(8).ToArray();
                                    Array.Reverse(uid);
                                    RFID = ByteArrayToHexString(uid).Replace(" ", "");
                                    list.Add(RFID);
                                    TagDataReport = RDR_GetTagDataReport(hreader, 2);
                                }
                                if (status != 0)
                                {
                                    status_andi = status;
                                    break;
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        status_andi    = -1;
                        status_rongrui = -1;
                    }

                    status = (status_rongrui != 0) ? status_rongrui : status_andi;
                    if (status == 17)
                    {
                        errorMsg = "天线位置异常或未被感应";
                    }
                    if (status != 0 && status != 17)
                    {
                        var data = new
                        {
                            functionName = "rf_init_com",
                            baud         = "19200",
                        };
                        var dataString = JsonConvert.SerializeObject(data);
                        GetRFIDAPIReturn(dataString).Content.ToString();
                    }
                    Console.WriteLine(Common.rfidDT.Rows.Count);
                    foreach (var rfid in list)
                    {
                        if (Common.rfidDT.Select("RFID = '" + rfid + "'").Count() == 0)
                        {
                            foundNewRFID = true;
                        }
                        DataRow row = Common.rfidDT.NewRow();
                        row["RFID"]      = rfid;
                        row["TimeStamp"] = MillisecNowCompute();
                        Common.rfidDT.Rows.Add(row);
                    }
                    if (foundNewRFID)
                    {
                        newFoundRFIDList = Common.rfidDT.AsEnumerable().Select(r => r.Field <string>("RFID")).Distinct().ToList();    //当发现新的标签时,跳出循环,将2500ms内所有扫描到的值赋给newFoundRFIDList
                    }
                    returnValue = JsonConvert.SerializeObject(new { list = newFoundRFIDList, existRFIDList = list, status = status.ToString(), error = errorMsg });
                    break;

                case "rf_closeport":
                    try
                    {
                        status = StaticClassReaderA.CloseComPort();
                        dict   = Common.dict;
                        foreach (KeyValuePair <int, string> item in dict)
                        {
                            if (item.Value == "andi")
                            {
                                portIndex = item.Key;
                                UIntPtr chreader = (UIntPtr)portIndex;
                                status = RDR_Close(chreader);
                            }
                        }
                        Common.dict = null;
                    }
                    catch (Exception e)
                    {
                    }
                    returnValue = JsonConvert.SerializeObject(new { status = status.ToString() });
                    break;
                }
            }
            catch (Exception e)
            {
                status      = INTERNALERROR;
                errorMsg    = e.ToString();
                returnValue = JsonConvert.SerializeObject(new { status = INTERNALERROR.ToString(), error = e.ToString() });
            }

            return(ResultToJson.toJson(returnValue));
        }
Ejemplo n.º 6
0
        // parameters:
        //      AIType  RFIDLIB.rfidlib_def.AI_TYPE_NEW / RFIDLIB.rfidlib_def.AI_TYPE_CONTINUE
        //      AntinnaSel  从 1 开始?
        public int tag_inventory(
            Byte AIType,
            Byte AntennaSelCount,
            Byte[] AntennaSel,
            //bool enable15693,
            //bool enable14443A,
            //bool enable18000p3m3,
            // Byte afiVal,
            // delegate_tag_report_handle tagReportHandler,
            ref UInt32 nTagCount)
        {
            Byte    enableAFI = 0;
            int     iret;
            UIntPtr InvenParamSpecList = RFIDLIB.rfidlib_reader.RDR_CreateInvenParamSpecList();

            if (InvenParamSpecList.ToUInt64() != 0)
            {
                RFIDLIB.rfidlib_aip_iso15693.ISO15693_CreateInvenParam(
                    InvenParamSpecList,
                    0,
                    enableAFI,
                    0x00,   // AFI, 打算要匹配的 AFI byte 值
                    0);
            }
            nTagCount = 0;
LABEL_TAG_INVENTORY:
            iret = RFIDLIB.rfidlib_reader.RDR_TagInventory(hreader, AIType, AntennaSelCount, AntennaSel, InvenParamSpecList);
            if (iret == 0 || iret == -21)
            {
                nTagCount += RFIDLIB.rfidlib_reader.RDR_GetTagDataReportCount(hreader);
                UIntPtr TagDataReport;
                TagDataReport = (UIntPtr)0;
                TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_FIRST); //first
                while (TagDataReport.ToUInt64() > 0)
                {
                    UInt32 aip_id = 0;
                    UInt32 tag_id = 0;
                    UInt32 ant_id = 0;
                    Byte   dsfid  = 0;
                    Byte   uidlen = 0;
                    Byte[] uid    = new Byte[16];

                    /* Parse iso15693 tag report */
                    {
                        iret = RFIDLIB.rfidlib_aip_iso15693.ISO15693_ParseTagDataReport(TagDataReport, ref aip_id, ref tag_id, ref ant_id, ref dsfid, uid);
                        if (iret == 0)
                        {
                            uidlen = 8;
                            object[] pList = { aip_id, tag_id, ant_id, uid, (int)uidlen };
                            //// Invoke(tagReportHandler, pList);
                            //tagReportHandler(hreader, aip_id, tag_id, ant_id, uid ,8);
                        }
                    }

                    /* Get Next report from buffer */
                    TagDataReport = RFIDLIB.rfidlib_reader.RDR_GetTagDataReport(hreader, RFIDLIB.rfidlib_def.RFID_SEEK_NEXT); //next
                }
                if (iret == -21)                                                                                              // stop trigger occur,need to inventory left tags
                {
                    AIType = RFIDLIB.rfidlib_def.AI_TYPE_CONTINUE;                                                            //use only-new-tag inventory
                    goto LABEL_TAG_INVENTORY;
                }
                iret = 0;
            }
            if (InvenParamSpecList.ToUInt64() != 0)
            {
                RFIDLIB.rfidlib_reader.DNODE_Destroy(InvenParamSpecList);
            }
            return(iret);
        }