Exemplo n.º 1
0
 /// <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);
     }
 }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
        /// <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);
        }