Exemplo n.º 1
0
        // Single inventory button click
        private void btn_scan_Click(object sender, EventArgs e)
        {
            // Clear list & tag storage
            Clear();

            // Change UI state to scanning
            SetUIState(true);

            try
            {
                // Clear NurApi/Module tag storage
                nur.ClearTags();

                // Execute simple inventory
                NurApi.InventoryResponse ir = nur.Inventory();

                if (ir.numTagsMem > 0)
                {
                    // Add all tags to list
                    AddTagsToList(nur.FetchTags());
                }
                else
                {
                    // No tags found..
                    lstbox.Items.Add("No tags found");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Inventory error: " + ex.ToString(), "Error");
            }

            // Change UI state to normal
            SetUIState(false);
        }
Exemplo n.º 2
0
        private async void InventoryButton_Click(object sender, RoutedEventArgs e)
        {
            InventoryButton.IsEnabled = false;

            // Perform inventory, run in task because NurApi calls may block
            await Task.Run(async() =>
            {
                try
                {
                    // Clear nur tag stroage first
                    mApi.ClearTagsEx();

                    // Perform simple inventory
                    NurApi.InventoryResponse rsp = mApi.Inventory();

                    // Fetch all tags from reader
                    NurApi.TagStorage storage = mApi.FetchTags();

                    // Print some info
                    string txt = string.Format("{0} tags found\n", rsp.numTagsMem);
                    lock (storage)
                    {
                        foreach (NurApi.Tag tag in storage)
                        {
                            txt += tag.GetEpcString() + "\n";
                        }
                    }

                    // Show dialog in UI thread
                    await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() =>
                    {
                        var dialog = new MessageDialog(txt, "Inventory Results");
                        await dialog.ShowAsync();
                    });
                }
                catch (Exception ex)
                {
                    await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() =>
                    {
                        var dialog = new MessageDialog(ex.Message, "Inventory Error");
                        await dialog.ShowAsync();
                    });
                }
            });

            InventoryButton.IsEnabled = true;
        }
Exemplo n.º 3
0
        /// <summary>
        /// Searches the nearest tag.
        /// </summary>
        /// <param name="hNur">The NurApi header.</param>
        /// <param name="autoTxLevel">if set to <c>true</c> [use auto tx level].</param>
        /// <param name="tag">reference for the nearest tag</param>
        /// <param name="usedTxLevel">reference for the used TxLevel.</param>
        /// <returns>
        /// The number of found tags.
        /// </returns>
        public static int SearchNearestTag(NurApi hNur, bool autoTxLevel, out NurApi.Tag tag, out int usedTxLevel)
        {
            // Set the used TxLevel
            usedTxLevel = hNur.TxLevel;
            // Clear previously inventoried tags from memory
            hNur.ClearTags();
            NurApi.TagStorage inventoriedTags = null;

            if (autoTxLevel)
            {
                // Backup TX Level
                int backupTxLevel = hNur.TxLevel;
                // Search Tags with auto TX Level
                for (int tx = MIN_TX_LEVEL; tx >= MAX_TX_LEVEL; tx--)
                {
                    // Set TX Level
                    hNur.TxLevel = tx;
                    // Set the used TxLevel
                    usedTxLevel = tx;
                    // Perform simple inventory
                    NurApi.InventoryResponse ir = hNur.SimpleInventory();
                    // Did we find any Tag
                    if (ir.numTagsMem > 0)
                    {
                        // Yes we did
                        break;
                    }
                }
                // Fetch tags from module, including tag meta
                inventoriedTags = hNur.FetchTags(true);
                // Restore TX Level
                hNur.TxLevel = backupTxLevel;
            }
            else
            {
                // Search Tags with fixed TX Level
                for (int i = 0; i < RETRIES; i++)
                {
                    // Perform simple inventory
                    NurApi.InventoryResponse ir = hNur.SimpleInventory();
                    // Did we find any Tag
                    if (ir.numTagsMem > 0)
                    {
                        // Yes we did
                        break;
                    }
                }
                // Fetch tags from module, including tag meta
                inventoriedTags = hNur.FetchTags(true);
            }

            // Search stongest Tag
            tag = null;
            int maxRssi = -128;

            for (int i = 0; i < inventoriedTags.Count; i++)
            {
                if (maxRssi < inventoriedTags[i].rssi)
                {
                    maxRssi = inventoriedTags[i].rssi;
                    tag     = inventoriedTags[i];
                }
            }

            // Return number of found tags
            return(inventoriedTags.Count);
        }
Exemplo n.º 4
0
        private void DoGetTags()
        {
            if (!hNur.IsConnected())
            {
                AddLog("Connection required.");
                return;
            }

            CurrentTag = null;
            AllTags.Clear();
            TagListView.Items.Clear();
            TagLabel.Text = "---";

            try
            {
                ResetToA();

                hNur.ClearTagsEx();



                NurApi.InventoryExParams   invParam;
                NurApi.InventoryExFilter[] invFilters;

                // Disable EPC+DATA mode
                hNur.InventoryReadCtl = false;
                // Configure InventoryExParams for Temperature read
                invParam.inventorySelState = NurApi.SELSTATE_SL;
                invParam.inventoryTarget   = NurApi.INVTARGET_A;
                invParam.Q           = hNur.InventoryQ;
                invParam.rounds      = hNur.InventoryRounds;
                invParam.session     = NurApi.SESSION_S0;
                invParam.transitTime = 0;                 // Disable
                // Configure InventoryExFilter
                invFilters                  = new NurApi.InventoryExFilter[1];
                invFilters[0].action        = NurApi.FACTION_0;
                invFilters[0].address       = 0;
                invFilters[0].bank          = NurApi.BANK_TID;
                invFilters[0].maskData      = new byte[] { 0xE2, 0x80, 0xB0, 0x40 };
                invFilters[0].maskBitLength = (invFilters[0].maskData.Length * 8) - 4;
                invFilters[0].target        = NurApi.SESSION_SL;
                invFilters[0].truncate      = false;
                // Read
                NurApi.InventoryResponse resp = hNur.InventoryEx(ref invParam, invFilters);
                // Fetch tags from the module
                NurApi.TagStorage tagStorage = hNur.FetchTags(true);

                for (int i = 0; i < tagStorage.Count; i++)
                {
                    NurApi.Tag tag = tagStorage[i];
                    AllTags.Add(new EM4325Tag(tag));
                    ListViewItem lvi = new ListViewItem(tag.GetEpcString());
                    lvi.SubItems.Add(tag.rssi.ToString());
                    lvi.SubItems.Add(tag.antennaId.ToString());
                    TagListView.Items.Add(lvi);
                }
                columnHeader_EPC.Width   = -2;
                columnHeader_RSSI.Width  = -2;
                columnHeader_AntID.Width = -2;
            }
            catch (Exception ex)
            {
                AddLog("Inventory error.");
                AddLog("Message: " + ex.Message);
            }
        }