/// <summary> /// Write Untraceable operation to tag /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btmWriteToTag_Click(object sender, RoutedEventArgs e) { try { if (((bool)rdBtnShowSpecificEpc.IsChecked) && (txtbxEpcLen.Text == "")) { MessageBox.Show("Please Enter length of EPC to Show", "Universal Reader Assistant Message", MessageBoxButton.OK, MessageBoxImage.Warning); return; } else { epcLen = 6; } antenna = ((null != GetSelectedAntennaList()) ? (GetSelectedAntennaList()[0]) : antenna); objReader.ParamSet("/reader/tagop/antenna", antenna); if ((bool)rdBtnShowSpecificEpc.IsChecked) { epcLen = Convert.ToInt32(txtbxEpcLen.Text); } Gen2.Password accessPassWord = new Gen2.Password(ByteConv.ToU32(ByteFormat.FromHex(txtbxAccesspaasword.Text.Replace(" ", "")), 0)); Gen2.Untraceable tagOp = new Gen2.NXP.AES.Untraceable(epc, epcLen, tid, user, range, accessPassWord.Value); objReader.ExecuteTagOp(tagOp, searchSelect); MessageBox.Show("Write operation is successfull", "Universal Reader Assistant Message", MessageBoxButton.OK, MessageBoxImage.Information); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } }
static void Main(string[] args) { // Program setup if (1 > args.Length) { Usage(); } int[] antennaList = null; for (int nextarg = 1; nextarg < args.Length; nextarg++) { string arg = args[nextarg]; if (arg.Equals("--ant")) { if (null != antennaList) { Console.WriteLine("Duplicate argument: --ant specified more than once"); Usage(); } antennaList = ParseAntennaList(args, nextarg); nextarg++; } else { Console.WriteLine("Argument {0}:\"{1}\" is not recognized", nextarg, arg); Usage(); } } try { // Create Reader object, connecting to physical device. // Wrap reader in a "using" block to get automatic // reader shutdown (using IDisposable interface). using (Reader r = Reader.Create(args[0])) { //Uncomment this line to add default transport listener. //r.Transport += r.SimpleTransportListener; r.Connect(); if (Reader.Region.UNSPEC == (Reader.Region)r.ParamGet("/reader/region/id")) { Reader.Region[] supportedRegions = (Reader.Region[])r.ParamGet("/reader/region/supportedRegions"); if (supportedRegions.Length < 1) { throw new FAULT_INVALID_REGION_Exception(); } r.ParamSet("/reader/region/id", supportedRegions[0]); } // Read Plan byte length; string model = (string)r.ParamGet("/reader/version/model"); if (r.isAntDetectEnabled(antennaList)) { Console.WriteLine("Module doesn't has antenna detection support please provide antenna list"); Usage(); } if ("M6e".Equals(model) || "M6e PRC".Equals(model) || "M6e JIC".Equals(model) || "M6e Micro".Equals(model) || "Mercury6".Equals(model) || "Astra-EX".Equals(model) || "Sargas".Equals(model)) { // Specifying the readLength = 0 will return full TID for any tag read in case of M6e varients, M6 and Astra-EX reader. length = 0; } else { length = 2; } // Embedded Secure Read Tag Operation - Standalone operation not supported Gen2.Password password = new Gen2.Password(0); Gen2.SecureReadData secureReadDataTagOp = new Gen2.SecureReadData(Gen2.Bank.TID, 0, (byte)0, Gen2.SecureTagType.HIGGS3, password);; SimpleReadPlan plan = new SimpleReadPlan(antennaList, TagProtocol.GEN2, null, secureReadDataTagOp, 1000); r.ParamSet("/reader/read/plan", plan); // Create and add tag listener r.TagRead += delegate(Object sender, TagReadDataEventArgs e) { Console.WriteLine("Background read: " + e.TagReadData); if (0 < e.TagReadData.Data.Length) { Console.WriteLine("Requested data: " + ByteFormat.ToHex(e.TagReadData.Data)); } }; // Create and add read exception listener r.ReadException += r_ReadException; // Create and add read authenticate listener r.ReadAuthentication += r_ReadAuthenticationListener; // Search for tags in the background r.StartReading(); Console.WriteLine("\r\n<Do other work here>\r\n"); Thread.Sleep(500); Console.WriteLine("\r\n<Do other work here>\r\n"); Thread.Sleep(500); r.StopReading(); } } catch (ReaderException re) { Console.WriteLine("Error: " + re.Message); Console.Out.Flush(); } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } }
static void Main(string[] args) { // Program setup if (1 != args.Length) { Console.WriteLine(String.Join("\r\n", new string[] { "Please provide reader URL, such as:", "tmr:///com4", "tmr://my-reader.example.com", })); Environment.Exit(1); } try { // Create Reader object, connecting to physical device. // Wrap reader in a "using" block to get automatic // reader shutdown (using IDisposable interface). using (Reader r = Reader.Create(args[0])) { //Uncomment this line to add default transport listener. //r.Transport += r.SimpleTransportListener; r.Connect(); if ((r is SerialReader) || (r is LlrpReader)) { if (Reader.Region.UNSPEC == (Reader.Region)r.ParamGet("/reader/region/id")) { Reader.Region[] supportedRegions = (Reader.Region[])r.ParamGet("/reader/region/supportedRegions"); if (supportedRegions.Length < 1) { throw new FAULT_INVALID_REGION_Exception(); } else { r.ParamSet("/reader/region/id", supportedRegions[0]); } } Gen2.Password pass = new Gen2.Password(0x0); r.ParamSet("/reader/gen2/accessPassword", pass); // BlockWrite and read using ExecuteTagOp Gen2.BlockWrite blockwrite = new Gen2.BlockWrite(Gen2.Bank.USER, 0, new ushort[] { 0xFFF1, 0x1122 }); r.ExecuteTagOp(blockwrite, null); Gen2.ReadData read = new Gen2.ReadData(Gen2.Bank.USER, 0, 2); ushort[] readData = (ushort[])r.ExecuteTagOp(read, null); foreach (ushort word in readData) { Console.Write(String.Format(" {0:X4}", word)); } Console.WriteLine(); // BlockWrite and read using embedded read command SimpleReadPlan readplan; TagReadData[] tagreads; blockwrite = new Gen2.BlockWrite(Gen2.Bank.USER, 0, new ushort[] { 0x1234, 0x5678 }); readplan = new SimpleReadPlan(null, TagProtocol.GEN2, //null, new TagData("1234567890ABCDEF"), blockwrite, 0); r.ParamSet("/reader/read/plan", readplan); r.Read(500); readplan = new SimpleReadPlan(null, TagProtocol.GEN2, null, new Gen2.ReadData(Gen2.Bank.USER, 0, 2), 0); r.ParamSet("/reader/read/plan", readplan); tagreads = r.Read(500); foreach (TagReadData trd in tagreads) { foreach (byte b in trd.Data) { Console.Write(String.Format(" {0:X2}", b)); } Console.WriteLine(" " + trd.ToString()); } } else { Console.WriteLine("Error: This codelet works only for Serial Readers and Llrp Readers"); } } } catch (ReaderException re) { Console.WriteLine("Error: " + re.Message); } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } }
static void Main(string[] args) { // Program setup if (1 != args.Length) { Console.WriteLine(String.Join("\r\n", new string[] { "Please provide reader URL, such as:", "tmr:///com4", "tmr://my-reader.example.com", })); Environment.Exit(1); } try { // Create Reader object, connecting to physical device. // Wrap reader in a "using" block to get automatic // reader shutdown (using IDisposable interface). using (Reader r = Reader.Create(args[0])) { //Uncomment this line to add default transport listener. //r.Transport += r.SimpleTransportListener; r.Connect(); if ((r is SerialReader) || (r is LlrpReader)) { if (Reader.Region.UNSPEC == (Reader.Region)r.ParamGet("/reader/region/id")) { Reader.Region[] supportedRegions = (Reader.Region[])r.ParamGet("/reader/region/supportedRegions"); if (supportedRegions.Length < 1) { throw new FAULT_INVALID_REGION_Exception(); } else { r.ParamSet("/reader/region/id", supportedRegions[0]); } } Gen2.Password pass = new Gen2.Password(0x0); r.ParamSet("/reader/gen2/accessPassword", pass); /************************************************/ Gen2.BlockPermaLock blockpermalock1 = new Gen2.BlockPermaLock(0x01, Gen2.Bank.USER, 0x00, 0x01, new ushort[] { 0x0010 }); // r.ExecuteTagOp(blockpermalock1, null); Gen2.BlockPermaLock blockpermalock2 = new Gen2.BlockPermaLock(0x00, Gen2.Bank.USER, 0x00, 0x01, null); byte[] lockStatus = (byte[])r.ExecuteTagOp(blockpermalock2, null); foreach (byte i in lockStatus) { Console.WriteLine("Lock Status : {0:x2}", i); } } else { Console.WriteLine("Error: This codelet works only for Serial Readers and Llrp Readers"); } } } catch (ReaderException re) { Console.WriteLine("Error: " + re.Message); } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } }
static void Main(string[] args) { // Program setup if (1 != args.Length) { Console.WriteLine(String.Join("\r\n", new string[] { "Please provide reader URL, such as:", "tmr:///com4", "tmr://my-reader.example.com", })); Environment.Exit(1); } try { // Create Reader object, connecting to physical device. // Wrap reader in a "using" block to get automatic // reader shutdown (using IDisposable interface). using (Reader r = Reader.Create(args[0])) { //Uncomment this line to add default transport listener. //r.Transport += r.SimpleTransportListener; r.Connect(); if (Reader.Region.UNSPEC == (Reader.Region)r.ParamGet("/reader/region/id")) { Reader.Region[] supportedRegions = (Reader.Region[])r.ParamGet("/reader/region/supportedRegions"); if (supportedRegions.Length < 1) { throw new FAULT_INVALID_REGION_Exception(); } else { r.ParamSet("/reader/region/id", supportedRegions[0]); } } // Read Plan byte length; string model = (string)r.ParamGet("/reader/version/model"); if ("M6e".Equals(model) || "M6e PRC".Equals(model) || "M6e Micro".Equals(model) || "Mercury6".Equals(model) || "Astra-EX".Equals(model)) { // Specifying the readLength = 0 will return full TID for any tag read in case of M6e varients, M6 and Astra-EX reader. length = 0; } else { length = 2; } // Embedded Secure Read Tag Operation - Standalone operation not supported Gen2.Password password = new Gen2.Password(0); Gen2.SecureReadData secureReadDataTagOp = new Gen2.SecureReadData(Gen2.Bank.TID, 0, (byte)0, Gen2.SecureTagType.HIGGS3, password);; SimpleReadPlan plan = new SimpleReadPlan(null, TagProtocol.GEN2, null, secureReadDataTagOp, 1000); r.ParamSet("/reader/read/plan", plan); // Create and add tag listener r.TagRead += delegate(Object sender, TagReadDataEventArgs e) { Console.WriteLine("Background read: " + e.TagReadData); Console.WriteLine("Requested data: " + ByteFormat.ToHex(e.TagReadData.Data)); }; // Create and add read exception listener r.ReadException += r_ReadException; // Create and add read authenticate listener r.ReadAuthentication += r_ReadAuthenticationListener; // Search for tags in the background r.StartReading(); Console.WriteLine("\r\n<Do other work here>\r\n"); Thread.Sleep(500); Console.WriteLine("\r\n<Do other work here>\r\n"); Thread.Sleep(500); r.StopReading(); } } catch (ReaderException re) { Console.WriteLine("Error: " + re.Message); Console.Out.Flush(); } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } }
static void Main(string[] args) { // Program setup if (1 > args.Length) { Usage(); } int[] antennaList = null; for (int nextarg = 1; nextarg < args.Length; nextarg++) { string arg = args[nextarg]; if (arg.Equals("--ant")) { if (null != antennaList) { Console.WriteLine("Duplicate argument: --ant specified more than once"); Usage(); } antennaList = ParseAntennaList(args, nextarg); nextarg++; } else { Console.WriteLine("Argument {0}:\"{1}\" is not recognized", nextarg, arg); Usage(); } } try { // Create Reader object, connecting to physical device. // Wrap reader in a "using" block to get automatic // reader shutdown (using IDisposable interface). using (Reader r = Reader.Create(args[0])) { //Uncomment this line to add default transport listener. //r.Transport += r.SimpleTransportListener; r.Connect(); if ((r is SerialReader) || (r is LlrpReader)) { if (Reader.Region.UNSPEC == (Reader.Region)r.ParamGet("/reader/region/id")) { Reader.Region[] supportedRegions = (Reader.Region[])r.ParamGet("/reader/region/supportedRegions"); if (supportedRegions.Length < 1) { throw new FAULT_INVALID_REGION_Exception(); } r.ParamSet("/reader/region/id", supportedRegions[0]); } string model = r.ParamGet("/reader/version/model").ToString(); if ((model.Equals("M6e Micro") || model.Equals("M6e Nano") || model.Equals("Sargas")) && antennaList == null) { Console.WriteLine("Module doesn't has antenna detection support please provide antenna list"); Usage(); } Gen2.Password pass = new Gen2.Password(0x0); r.ParamSet("/reader/gen2/accessPassword", pass); //Use first antenna for operation if (antennaList != null) { r.ParamSet("/reader/tagop/antenna", antennaList[0]); } /************************************************/ Gen2.BlockPermaLock blockpermalock1 = new Gen2.BlockPermaLock(0x01, Gen2.Bank.USER, 0x00, 0x01, new ushort[] { 0x0010 }); //r.ExecuteTagOp(blockpermalock1, null); Gen2.BlockPermaLock blockpermalock2 = new Gen2.BlockPermaLock(0x00, Gen2.Bank.USER, 0x00, 0x01, null); byte[] lockStatus = (byte[])r.ExecuteTagOp(blockpermalock2, null); foreach (byte i in lockStatus) { Console.WriteLine("Lock Status : {0:x2}", i); } } else { Console.WriteLine("Error: This codelet works only for Serial Readers and Llrp Readers"); } } } catch (ReaderException re) { Console.WriteLine("Error: " + re.Message); } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } }
static void Main(string[] args) { // Program setup if (1 > args.Length) { Usage(); } int[] antennaList = null; for (int nextarg = 1; nextarg < args.Length; nextarg++) { string arg = args[nextarg]; if (arg.Equals("--ant")) { if (null != antennaList) { Console.WriteLine("Duplicate argument: --ant specified more than once"); Usage(); } antennaList = ParseAntennaList(args, nextarg); nextarg++; } else { Console.WriteLine("Argument {0}:\"{1}\" is not recognized", nextarg, arg); Usage(); } } try { // Create Reader object, connecting to physical device. // Wrap reader in a "using" block to get automatic // reader shutdown (using IDisposable interface). using (Reader r = Reader.Create(args[0])) { //Uncomment this line to add default transport listener. //r.Transport += r.SimpleTransportListener; r.Connect(); if ((r is SerialReader) || (r is LlrpReader)) { if (Reader.Region.UNSPEC == (Reader.Region)r.ParamGet("/reader/region/id")) { Reader.Region[] supportedRegions = (Reader.Region[])r.ParamGet("/reader/region/supportedRegions"); if (supportedRegions.Length < 1) { throw new FAULT_INVALID_REGION_Exception(); } r.ParamSet("/reader/region/id", supportedRegions[0]); } string model = r.ParamGet("/reader/version/model").ToString(); if ((model.Equals("M6e Micro") || model.Equals("M6e Nano") || model.Equals("Sargas")) && antennaList == null) { Console.WriteLine("Module doesn't has antenna detection support please provide antenna list"); Usage(); } Gen2.Password pass = new Gen2.Password(0x0); r.ParamSet("/reader/gen2/accessPassword", pass); //Use first antenna for operation if (antennaList != null) { r.ParamSet("/reader/tagop/antenna", antennaList[0]); } // BlockWrite and read using ExecuteTagOp Gen2.BlockWrite blockwrite = new Gen2.BlockWrite(Gen2.Bank.USER, 0, new ushort[] { 0xFFF1, 0x1122 }); r.ExecuteTagOp(blockwrite, null); Gen2.ReadData read = new Gen2.ReadData(Gen2.Bank.USER, 0, 2); ushort[] readData = (ushort[])r.ExecuteTagOp(read, null); foreach (ushort word in readData) { Console.Write(" {0:X4}", word); } Console.WriteLine(); // BlockWrite and read using embedded read command SimpleReadPlan readplan; TagReadData[] tagreads; blockwrite = new Gen2.BlockWrite(Gen2.Bank.USER, 0, new ushort[] { 0x1234, 0x5678 }); readplan = new SimpleReadPlan(antennaList, TagProtocol.GEN2, //null, new TagData("1234567890ABCDEF"), blockwrite, 0); r.ParamSet("/reader/read/plan", readplan); r.Read(500); readplan = new SimpleReadPlan(antennaList, TagProtocol.GEN2, null, new Gen2.ReadData(Gen2.Bank.USER, 0, 2), 0); r.ParamSet("/reader/read/plan", readplan); tagreads = r.Read(500); foreach (TagReadData trd in tagreads) { foreach (byte b in trd.Data) { Console.Write(" {0:X2}", b); } Console.WriteLine(" " + trd); } } else { Console.WriteLine("Error: This codelet works only for Serial Readers and Llrp Readers"); } } } catch (ReaderException re) { Console.WriteLine("Error: " + re.Message); } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } }
/// <summary> /// Parse string representing a parameter value. /// </summary> /// <param name="name">Name of parameter</param> /// <param name="valstr">String to be parsed into a parameter value</param> private Object ParseValue(string name, string valstr) { Object value = ParseValue(valstr); switch (name.ToLower()) { case "/reader/antenna/portswitchgpos": case "/reader/region/hoptable": value = ((ArrayList)value).ToArray(typeof(int)); break; case "/reader/gpio/inputlist": case "/reader/read/trigger/gpi": case "/reader/probebaudrates": value = ((ArrayList)value).ToArray(typeof(int)); break; case "/reader/gpio/outputlist": value = ((ArrayList)value).ToArray(typeof(int)); break; case "/reader/antenna/settlingtimelist": case "/reader/antenna/txrxmap": case "/reader/radio/portreadpowerlist": case "/reader/radio/portwritepowerlist": value = ArrayListToInt2Array((ArrayList)value); break; case "/reader/region/lbt/enable": case "/reader/antenna/checkport": case "/reader/tagreaddata/recordhighestrssi": case "/reader/tagreaddata/uniquebyantenna": case "/reader/tagreaddata/uniquebydata": case "/reader/tagreaddata/reportrssiindbm": case "/reader/radio/enablepowersave": case "/reader/status/antennaenable": case "/reader/status/frequencyenable": case "/reader/status/temperatureenable": case "/reader/tagreaddata/reportrssiIndbm": case "/reader/tagreaddata/uniquebyprotocol": case "/reader/tagreaddata/enablereadfilter": case "/reader/radio/enablesjc": case "/reader/gen2/writeearlyexit": case "/reader/gen2/sendselect": case "/reader/extendedepc": value = ParseBool(valstr); break; case "/reader/gen2/t4": value = Convert.ToUInt32(valstr); break; case "/reader/read/plan": if (valstr.StartsWith("SimpleReadPlan")) { value = LoadSimpleReadPlan(valstr); } else { string str = string.Empty; List <ReadPlan> RdPlans = new List <ReadPlan>(); str = valstr.Remove(0, 14); //Remove leading and trailing square brackets string remove = Regex.Replace(str, @"]$|^\[", ""); int CurrentIndex = 0, PreviousIndex = 1; List <string> Plans = new List <string>(); while (CurrentIndex != -1) { CurrentIndex = str.IndexOf("SimpleReadPlan:", CurrentIndex); string st = string.Empty; if (CurrentIndex != -1) { st = str.Substring(PreviousIndex, CurrentIndex - PreviousIndex); PreviousIndex = CurrentIndex; CurrentIndex += 1; } else { st = str.Substring(PreviousIndex); } if (st != string.Empty) { st = st.Remove(st.Length - 1, 1); Plans.Add(st); } } foreach (string plan in Plans) { RdPlans.Add(LoadSimpleReadPlan(plan)); } MultiReadPlan mrp = new MultiReadPlan(RdPlans); value = mrp; } break; case "/reader/region/id": value = Enum.Parse(typeof(Reader.Region), (string)value, true); break; case "/reader/powermode": value = Enum.Parse(typeof(Reader.PowerMode), (string)value, true); break; case "/reader/tagop/protocol": if (value is string) { value = Enum.Parse(typeof(TagProtocol), (string)value, true); } break; case "/reader/gen2/accesspassword": value = new Gen2.Password(Convert.ToUInt32(valstr, 16)); break; case "/reader/gen2/session": value = (Gen2.Session)Enum.Parse(typeof(Gen2.Session), valstr, true); break; case "/reader/gen2/blf": value = (Gen2.LinkFrequency)Enum.Parse(typeof(Gen2.LinkFrequency), valstr, true); break; case "/reader/gen2/tagencoding": value = (Gen2.TagEncoding)Enum.Parse(typeof(Gen2.TagEncoding), valstr, true); break; case "/reader/iso180006b/blf": value = (Iso180006b.LinkFrequency)Enum.Parse(typeof(Iso180006b.LinkFrequency), valstr, true); break; case "/reader/gen2/target": value = (Gen2.Target)Enum.Parse(typeof(Gen2.Target), valstr, true); break; case "/reader/gen2/tari": value = (Gen2.Tari)Enum.Parse(typeof(Gen2.Tari), valstr, true); break; case "/reader/gen2/protocolextension": value = (Gen2.Tari)Enum.Parse(typeof(Gen2.ProtocolExtension), valstr, true); break; case "/reader/regulatory/mode": value = Enum.Parse(typeof(Reader.RegulatoryMode), valstr, true); break; case "/reader/regulatory/modulation": value = Enum.Parse(typeof(Reader.RegulatoryModulation), valstr, true); break; case "/reader/usermode": value = (SerialReader.UserMode)Enum.Parse(typeof(SerialReader.UserMode), (string)valstr, true); break; case "/reader/stats/enable": valstr = valstr.Trim(new char[] { '[', ']' }); value = valstr != string.Empty ? (Reader.Stat.StatsFlag)Enum.Parse(typeof(Reader.Stat.StatsFlag), valstr, true) : (Reader.Stat.StatsFlag)Enum.Parse(typeof(Reader.Stat.StatsFlag), "NONE", true); break; case "/reader/gen2/writemode": value = (Gen2.WriteMode)Enum.Parse(typeof(Gen2.WriteMode), valstr, true); break; case "/reader/iso180006b/delimiter": value = (Iso180006b.Delimiter)Enum.Parse(typeof(Iso180006b.Delimiter), valstr, true); break; case "/reader/iso180006b/modulationdepth": value = (Iso180006b.ModulationDepth)Enum.Parse(typeof(Iso180006b.ModulationDepth), valstr, true); break; case "/reader/gen2/q": Gen2.Q setQ = null; if (-1 != valstr.IndexOf("DynamicQ")) { setQ = new Gen2.DynamicQ(); } else { string resultString = Regex.Match(valstr, @"\d+").Value; int q = Int32.Parse(resultString); setQ = new Gen2.StaticQ((byte)q); } value = setQ; break; case "/reader/gen2/bap": MatchCollection mc = Regex.Matches(valstr, @"\d+"); Gen2.BAPParameters bap = new Gen2.BAPParameters(); bap.POWERUPDELAY = Convert.ToInt32(mc[0].ToString()); bap.FREQUENCYHOPOFFTIME = Convert.ToInt32(mc[1].ToString()); value = bap; break; case "/reader/gen2/initq": Gen2.InitQ queue = new Gen2.InitQ(); if (valstr.StartsWith("[") && valstr.EndsWith("]")) { valstr = valstr.Substring(1, valstr.Length - 2); string[] qValue = valstr.Split(','); foreach (string str1 in qValue) { string str = str1.Trim(); if (str.StartsWith("qEnable:")) { int index = str.IndexOf(":"); string qEnableVal = str.Substring(index + 1).Trim(); queue.qEnable = Convert.ToBoolean(qEnableVal); } else if (str.StartsWith("initialQ:")) { int index = str.IndexOf(":"); string qEnableVal = str.Substring(index + 1).Trim(); queue.initialQ = Convert.ToByte(qEnableVal); } else { throw new Exception(str + " is not a valid option"); } } value = queue; } break; case "/reader/metadata": string[] usermeta = valstr.Split(','); SerialReader.TagMetadataFlag val = 0x0000; foreach (string meta in usermeta) { switch (meta.Trim()) { case "NONE": val |= SerialReader.TagMetadataFlag.NONE; break; case "ANTENNAID": val |= SerialReader.TagMetadataFlag.ANTENNAID; break; case "DATA": val |= SerialReader.TagMetadataFlag.DATA; break; case "FREQUENCY": val |= SerialReader.TagMetadataFlag.FREQUENCY; break; case "GPIO": val |= SerialReader.TagMetadataFlag.GPIO; break; case "PHASE": val |= SerialReader.TagMetadataFlag.PHASE; break; case "PROTOCOL": val |= SerialReader.TagMetadataFlag.PROTOCOL; break; case "READCOUNT": val |= SerialReader.TagMetadataFlag.READCOUNT; break; case "RSSI": val |= SerialReader.TagMetadataFlag.RSSI; break; case "TIMESTAMP": val |= SerialReader.TagMetadataFlag.TIMESTAMP; break; case "BRAND_IDENTIFIER": val |= SerialReader.TagMetadataFlag.BRAND_IDENTIFIER; break; default: case "ALL": val |= SerialReader.TagMetadataFlag.ALL; break; } } value = val; break; default: break; } return(value); }