Пример #1
0
        void _ObjReader_ReadException(object sender, ReaderExceptionEventArgs e)
        {
            try
            {
                //logger.Error(e.ReaderException.Message, e.ReaderException);
                writeErrorLog(e.ReaderException.Message, e.ReaderException);

                if (_form.InvokeRequired)
                {
                    _form.Invoke(new ShowStatusDelegate(_ObjReader_ReadException), sender, e);
                }
                else
                {
                    if (OnTagReadException != null)
                    {
                        OnTagReadException.Invoke(sender, e);
                    }
                }
            }
            catch (Exception ex)
            {
                writeErrorLog(ex.Message, ex);
                throw ex;
            }
        }
Пример #2
0
        public void EnableReader()
        {
            try
            {
                // Make sure reader is connected
                _ObjReader = ReadMgr.GetReader();

                if (_ObjReader == null)
                {
                    //if (scannerstatuslabel != null)
                    //{
                    //    scannerstatuslabel.Text = "RFID Reader Failed!";
                    //    scannerstatuslabel.Visible = true;
                    //}
                    if (OnTagReadException != null)
                    {
                        OnTagReadException.Invoke(this, new ReaderExceptionEventArgs(new ReaderException("RFID Reader Failed!")));
                    }
                    return;
                }

                System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();

                Cursor.Current = Cursors.WaitCursor;
                try
                {
                    // MCS++
                    //Check the battery power level
                    switch (BatteryStatusCheck())
                    {
                    case 1:         //Battery percentage low
                        throw new Exception("Battery level is too low to read tags.");

                    //MessageBox.Show();
                    //return;
                    case 2:         //Battery Voltage low
                        throw new Exception("Battery voltage is too low to read tags.");
                        //MessageBox.Show();
                        //return;
                    }
                    // MCS--

                    properties["isreading"] = "yes";
                    Utility.SaveConfigurations(properties);

                    //disable read power coverage

                    ReadMgr.GetReader().ParamSet("/reader/transportTimeout", 2000);
                    string storagevalue = properties["readpower"];
                    int    powerLevel   = Convert.ToInt32(storagevalue);
                    ReadMgr.GetReader().ParamSet("/reader/radio/readPower", powerLevel);
                    Utility.SwitchRegion(properties["region"]);
                    // MCS++
#if MCS_NOMAD
                    ReadMgr.GetReader().ParamSet("/reader/antenna/txRxMap", new int[][] { new int[] { 1, 1, 1 } });
                    ant.Add(1);
#else
                    // MCS++ - Will we use 1 or 2 antenna?
                    ReadMgr.GetReader().ParamSet("/reader/antenna/txRxMap", new int[][] { new int[] { 2, 2, 2 } });
                    // MCS--
#endif
                    // MCS--
                    SimpleReadPlan plan = new SimpleReadPlan(ant.ToArray(), TagProtocol.GEN2);
                    ReadMgr.GetReader().ParamSet("/reader/read/plan", plan);

                    //set properties
                    ReadMgr.GetReader().ParamSet("/reader/read/asyncOffTime", 50);
                    ReadMgr.GetReader().ParamSet("/reader/powerMode", Reader.PowerMode.FULL);

                    //set the tag population settings
                    ReadMgr.GetReader().ParamSet("/reader/gen2/target", Gen2.Target.A);//default target
                    string tagPopulation = properties["tagpopulation"];
                    switch (tagPopulation)
                    {
                    case "small":
                        ReadMgr.GetReader().ParamSet("/reader/gen2/q", new Gen2.StaticQ(2));
                        ReadMgr.GetReader().ParamSet("/reader/gen2/session", Gen2.Session.S0);
                        ReadMgr.GetReader().ParamSet("/reader/gen2/tagEncoding", Gen2.TagEncoding.M4);
                        break;

                    case "medium":
                        ReadMgr.GetReader().ParamSet("/reader/gen2/q", new Gen2.StaticQ(4));
                        ReadMgr.GetReader().ParamSet("/reader/gen2/session", Gen2.Session.S1);
                        ReadMgr.GetReader().ParamSet("/reader/gen2/tagEncoding", Gen2.TagEncoding.M4);
                        break;

                    case "large":
                        ReadMgr.GetReader().ParamSet("/reader/gen2/q", new Gen2.StaticQ(6));
                        ReadMgr.GetReader().ParamSet("/reader/gen2/session", Gen2.Session.S1);
                        ReadMgr.GetReader().ParamSet("/reader/gen2/tagEncoding", Gen2.TagEncoding.M2);
                        break;

                    default: break;
                    }

                    if (null != properties)
                    {
                        Utility.SetReaderSettings(ReadMgr.GetReader(), properties);
                    }
                    else
                    {
                        throw new Exception("properties are null");
                    }
                    //MessageBox.Show("properties are null");
                    //set the read plan and filter
                    TagFilter filter;
                    int       addressToRead = int.Parse(properties["selectionaddress"]);
                    Gen2.Bank bank          = Gen2.Bank.EPC;
                    switch (properties["tagselection"].ToLower())
                    {
                    case "None":
                    case "epc": bank = Gen2.Bank.EPC; break;

                    case "tid": bank = Gen2.Bank.TID; break;

                    case "user": bank = Gen2.Bank.USER; break;

                    case "reserved": bank = Gen2.Bank.RESERVED; break;

                    default: break;
                    }
                    if ("yes" == properties["ismaskselected"])
                    {
                        filter = new Gen2.Select(true, bank, (uint)addressToRead * 8, (ushort)(properties["selectionmask"].Length * 4), ByteFormat.FromHex(properties["selectionmask"]));
                    }
                    else
                    {
                        filter = new Gen2.Select(false, bank, (uint)addressToRead * 8, (ushort)(properties["selectionmask"].Length * 4), ByteFormat.FromHex(properties["selectionmask"]));
                    }

                    // MCS++
#if MCS_NOMAD
                    SimpleReadPlan srp;
                    if (properties["tagselection"].ToLower() == "none")
                    {
                        srp = new SimpleReadPlan(new int[] { 1 }, TagProtocol.GEN2, null, 0);
                    }
                    else
                    {
                        srp = new SimpleReadPlan(new int[] { 1 }, TagProtocol.GEN2, filter, 0);
                    }
                    ReadMgr.GetReader().ParamSet("/reader/read/plan", srp);
#else
                    // MCS++ - use antenna 2
                    SimpleReadPlan srp;
                    if (properties["tagselection"].ToLower() == "none")
                    {
                        //srp = new SimpleReadPlan(new int[] { 1 }, TagProtocol.GEN2, null, 0);
                        srp = new SimpleReadPlan(new int[] { 2 }, TagProtocol.GEN2, null, 0);
                    }
                    else
                    {
                        //srp = new SimpleReadPlan(new int[] { 1 }, TagProtocol.GEN2, filter, 0);
                        srp = new SimpleReadPlan(new int[] { 2 }, TagProtocol.GEN2, filter, 0);
                    }
                    ReadMgr.GetReader().ParamSet("/reader/read/plan", srp);
                    // MCS--
#endif
                    // MCS--
                    ReadMgr.GetReader().ReadException += _ObjReader_ReadException;
                    ReadMgr.GetReader().TagRead       += _ObjReader_TagRead;
                    ReadMgr.GetReader().StartReading();
                }
                catch (Exception ex)
                {
                    writeErrorLog(ex.Message, ex);
                    ReadMgr.GetReader().ParamSet("/reader/powerMode", Reader.PowerMode.MAXSAVE);
                    properties["isreading"] = "no";
                    Utility.SaveConfigurations(properties);
                    throw ex;
                }
                finally
                {
                    Cursor.Current = Cursors.Default;
                }
            }
            catch (Exception ex)
            {
                writeErrorLog(ex.ToString(), ex);
                if (-1 != ex.Message.IndexOf("RFID reader was not found"))
                {
                    //MessageBox.Show(ex.Message, "Error");
                    throw ex;
                }
                else
                {
                    properties["isreading"] = "no";
                    Utility.SaveConfigurations(properties);
                    throw ex;
                }
            }
        }