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