Exemplo n.º 1
0
        public UInt16Array ChooseAttackPosition(Critter npc, Critter target, AttackChoice attackChoice)
        {
            var weapon = npc.GetItemById (attackChoice.WeaponId);
            if (weapon == null)
                return null;

            var weaponDistance = weapon.Proto.WeaponMaxDist (attackChoice.WeaponUse);
            var distance = Global.GetDistance (npc, target);

            if (weaponDistance < distance) {
                var direction = Global.GetDirection (npc, target);
                var hexX = npc.HexX;
                var hexY = npc.HexY;

                do {
                    npc.GetMap ().MoveHexByDir (ref hexX, ref hexY, direction, 1);
                } while(!npc.GetMap ().IsHexPassed (hexX, hexY));

                var result = new UInt16Array ();
                result.Add (hexX);
                result.Add (hexY);
                result.Add ((ushort)direction);
                return result;
            }

            return null;
        }
Exemplo n.º 2
0
        public static PARAM_C1G2BlockWrite ControlMessage(ushort state, ushort value)
        {
            var data = new UInt16Array();

            data.Add(value);

            return(new PARAM_C1G2BlockWrite()
            {
                MB = new TwoBits(0),
                OpSpecID = 111,
                WordPointer = state,
                WriteData = data,
                AccessPassword = 0,
            });
        }
Exemplo n.º 3
0
        /// <summary>
        /// Generates a "true" BlockWrite command from an offset and an array of data, taking care to
        /// avoid overlapping with the control messages we generate
        /// </summary>
        private PARAM_C1G2BlockWrite BlockWriteCmd(ushort offset, byte[] dataBlock)
        {
            var words = new UInt16Array();

            for (var i = 0; i < dataBlock.Length; i += 2)
            {
                words.Add((ushort)((dataBlock[i + 1] << 8) | dataBlock[i]));
            }

            var accessSpec = LLRPHelpers.DataMessage(words, offset, (ushort)this.nextAccessCmdId);

            this.nextAccessCmdId += 1;

            return(accessSpec);
        }
Exemplo n.º 4
0
        private static PARAM_AISpec WispInventoryAISpec(ushort tagPopulation = 4)
        {
            var antennaConfig = new PARAM_AntennaConfiguration()
            {
                AntennaID = 1,
                AirProtocolInventoryCommandSettings = new UNION_AirProtocolInventoryCommandSettings(),
            };
            var inventoryCommand = new PARAM_C1G2InventoryCommand()
            {
                C1G2RFControl = new PARAM_C1G2RFControl()
                {
                    ModeIndex = 0, Tari = 0
                },
                C1G2SingulationControl = new PARAM_C1G2SingulationControl()
                {
                    Session = new TwoBits(1), TagPopulation = tagPopulation
                },
                TagInventoryStateAware = false,
            };

            antennaConfig.AirProtocolInventoryCommandSettings.Add(inventoryCommand);

            var enabledAntennas = new UInt16Array();

            enabledAntennas.Add(1);

            return(new PARAM_AISpec()
            {
                AntennaIDs = enabledAntennas,

                AISpecStopTrigger = new PARAM_AISpecStopTrigger()
                {
                    AISpecStopTriggerType = ENUM_AISpecStopTriggerType.Null
                },

                InventoryParameterSpec = new PARAM_InventoryParameterSpec[]
                {
                    new PARAM_InventoryParameterSpec()
                    {
                        InventoryParameterSpecID = 1234,
                        ProtocolID = ENUM_AirProtocols.EPCGlobalClass1Gen2,
                        AntennaConfiguration = new PARAM_AntennaConfiguration[] { antennaConfig },
                    }
                }
            });
        }
Exemplo n.º 5
0
        /// <summary>
        /// Before starting inventorying, save settings in the mainform
        /// </summary>
        public bool SaveSettings()
        {
            RFIDReaderParameter.Reset     = cbResetToFactoryDefault.Checked;
            RFIDReaderParameter.Mask      = cbMask.Text;
            RFIDReaderParameter.ExtraMask = cbExtraMask.Text;

            if (rbtnManualReadMode.Checked)
            {
                RFIDReaderParameter.ReadMode = "Manual";
            }
            else
            {
                RFIDReaderParameter.ReadMode = "Timer";
                RFIDReaderParameter.Duration = Convert.ToUInt32(tbxDuration.Text);
            }


            RFIDReaderParameter.AntennaConfiguration.FixedFrequencyMode = cbFreqMode.Text;
            if (RFIDReaderParameter.AntennaConfiguration.FixedFrequencyMode != "Disabled")
            {
                RFIDReaderParameter.AntennaConfiguration.Hopping          = true;
                RFIDReaderParameter.AntennaConfiguration.HoppingStep      = Convert.ToUInt16(nudHop.Value);
                RFIDReaderParameter.AntennaConfiguration.FixedChannelList = new UInt16Array();
                UInt16Array channelList = new UInt16Array();

                if (clbFreqSet.CheckedIndices.Count < 2)
                {
                    MessageBox.Show("Must choose at least 2 frequencies");
                    return(false);
                }
                else
                {
                    for (int i = 0; i < clbFreqSet.CheckedIndices.Count; i++)
                    {
                        channelList.Add((ushort)(clbFreqSet.CheckedIndices[i] + 1));
                    }

                    if (RFIDReaderParameter.AntennaConfiguration.HoppingStep <= 0)
                    {
                        MessageBox.Show("HoppingStep must be larger than 0");
                        return(false);
                    }
                    else if (RFIDReaderParameter.AntennaConfiguration.HoppingStep >= channelList.Count)
                    {
                        MessageBox.Show("HoppingStep must be smaller than Chosen List");
                        return(false);
                    }
                    else
                    {
                        int len = channelList.Count;
                        RFIDReaderParameter.AntennaConfiguration.FixedChannelList.Add(channelList[0]);
                        for (int i = 1; i < len; i++)
                        {
                            int nextIndex = (0 + i * RFIDReaderParameter.AntennaConfiguration.HoppingStep) % len;
                            if (nextIndex == 0)
                            {
                                break;
                            }
                            RFIDReaderParameter.AntennaConfiguration.FixedChannelList.Add(channelList[nextIndex]);
                        }
                        return(true);
                    }
                }
            }
            else
            {
                RFIDReaderParameter.AntennaConfiguration.Hopping     = false;
                RFIDReaderParameter.AntennaConfiguration.HoppingStep = 0;
                if (clbFreqSet.CheckedIndices.Count < 1)
                {
                    MessageBox.Show("Please choose one frequency!");
                    return(false);
                }
                else if (clbFreqSet.CheckedIndices.Count > 1)
                {
                    MessageBox.Show("Can only choose one frequency!");
                    return(false);
                }
                else
                {
                    RFIDReaderParameter.AntennaConfiguration.ChannelIndex = (ushort)(clbFreqSet.CheckedIndices[0] + 1);
                    return(true);
                }
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Before starting inventorying, get parameters from ReaderSettingsFrom and Save them in the RFIDReaderParameter
        /// </summary>
        /// <returns>if sending successfully, return true; otherwise, return false</returns>
        public bool SendConfigToRFIDReaderPara()
        {
            //------Basic Settings------
            RFIDReaderParameter.Reset = cbResetToFactoryDefault.Checked;
            // Read Mode
            if (rbtnManualReadMode.Checked)
            {
                RFIDReaderParameter.ReadMode = "Manual";
            }
            else
            {
                RFIDReaderParameter.ReadMode = "Timer";
                if (tbxDuration.Text.Trim() == String.Empty)
                {
                    MessageBox.Show("Please input duration for timer mode", "Reader Settings Error");
                    return(false);
                }
                else if (Convert.ToUInt32(tbxDuration.Text) == 0)
                {
                    MessageBox.Show("Duration for timer mode should be larger than 0", "Reader Settings Error");
                    return(false);
                }
                else
                {
                    RFIDReaderParameter.Duration = Convert.ToUInt32(tbxDuration.Text);
                }
            }
            // Frequency Information
            RFIDReaderParameter.antennaConfiguration.FixedFrequencyMode = cbFreqMode.Text;
            if (RFIDReaderParameter.antennaConfiguration.FixedFrequencyMode != "Disabled")
            {
                RFIDReaderParameter.antennaConfiguration.Hopping          = true;
                RFIDReaderParameter.antennaConfiguration.HoppingStep      = Convert.ToUInt16(nudHop.Value);
                RFIDReaderParameter.antennaConfiguration.FixedChannelList = new UInt16Array();
                UInt16Array channelList = new UInt16Array();

                if (clbFreqSet.CheckedIndices.Count < 2)
                {
                    MessageBox.Show("Must choose at least 2 frequencies", "Reader Settings Error");
                    return(false);
                }
                else
                {
                    for (int i = 0; i < clbFreqSet.CheckedIndices.Count; i++)
                    {
                        channelList.Add((ushort)(clbFreqSet.CheckedIndices[i] + 1));
                    }

                    if (RFIDReaderParameter.antennaConfiguration.HoppingStep <= 0)
                    {
                        MessageBox.Show("HoppingStep must be larger than 0", "Reader Settings Error");
                        return(false);
                    }
                    else if (RFIDReaderParameter.antennaConfiguration.HoppingStep >= channelList.Count)
                    {
                        MessageBox.Show("HoppingStep must be smaller than Chosen List", "Reader Settings Error");
                        return(false);
                    }
                    else
                    {
                        int len = channelList.Count;
                        RFIDReaderParameter.antennaConfiguration.FixedChannelList.Add(channelList[0]);
                        for (int i = 1; i < len; i++)
                        {
                            int nextIndex = (0 + i * RFIDReaderParameter.antennaConfiguration.HoppingStep) % len;
                            if (nextIndex == 0)
                            {
                                break;
                            }
                            RFIDReaderParameter.antennaConfiguration.FixedChannelList.Add(channelList[nextIndex]);
                        }
                    }
                }
            }
            else
            {
                RFIDReaderParameter.antennaConfiguration.Hopping     = false;
                RFIDReaderParameter.antennaConfiguration.HoppingStep = 0;
                if (clbFreqSet.CheckedIndices.Count < 1)
                {
                    MessageBox.Show("Please choose one frequency!");
                    return(false);
                }
                else if (clbFreqSet.CheckedIndices.Count > 1)
                {
                    MessageBox.Show("Can only choose one frequency!");
                    return(false);
                }
                else
                {
                    RFIDReaderParameter.antennaConfiguration.ChannelIndex = (ushort)(clbFreqSet.CheckedIndices[0] + 1);
                }
            }
            // Tag Filter
            RFIDReaderParameter.antennaConfiguration.mask = this.includeTextBox.Text;
            //  RFIDReaderParameter.antennaConfiguration.extraMask = this.excludeTextBox.Text;
            //------Basic Settings------

            //------Antenna Settings------
            RFIDReaderParameter.antennaConfiguration.TagInventoryStateAware = Convert.ToBoolean(cbTagInventoryStateAware.Text);
            // C1G2 RF Control
            RFIDReaderParameter.antennaConfiguration.ModeIndex = RFIDReaderParameter.readerCapabilities.PreDefinedModeTable[cbModeIndex.Text];
            if (tbxTari.Text.Trim() == String.Empty)
            {
                MessageBox.Show("Please Input Tari!", "Reader Settings Error");
                return(false);
            }
            else
            {
                RFIDReaderParameter.antennaConfiguration.Tari = Convert.ToUInt16(tbxTari.Text);
            }
            // C1G2 Singulation Control
            RFIDReaderParameter.antennaConfiguration.SelectedSession      = cbSession.Text;
            RFIDReaderParameter.antennaConfiguration.SelectedSessionIndex = RFIDReaderParameter.readerCapabilities.Sessions[cbSession.Text];
            if (tbxTagPopulation.Text.Trim() == String.Empty)
            {
                MessageBox.Show("Please Input Tag Population!", "Reader Settings Error");
                return(false);
            }
            else
            {
                RFIDReaderParameter.antennaConfiguration.TagPopulation = Convert.ToUInt16(tbxTagPopulation.Text);
            }
            if (tbxTagTransitTime.Text.Trim() == String.Empty)
            {
                MessageBox.Show("Please Input Tag Transit Time!", "Reader Settings Error");
                return(false);
            }
            else
            {
                RFIDReaderParameter.antennaConfiguration.TagTransitTime = Convert.ToUInt16(tbxTagTransitTime.Text);
            }
            //ImpinJ
            RFIDReaderParameter.antennaConfiguration.SelectedSearchMode        = cbImpiJSearchMode.Text;
            RFIDReaderParameter.antennaConfiguration.ReducedPowerFrequencyMode = cbImpinjReducedPowerFrequencyMode.Checked;
            if (cbImpinjReducedPowerFrequencyMode.Checked)
            {
                if (tbxReducedChannelList.Text.Trim() == String.Empty)
                {
                    MessageBox.Show("Please Input Channel List!");
                    return(false);
                }
                else
                {
                    string[]    strs     = tbxReducedChannelList.Text.Trim().Split(',');
                    UInt16Array channels = new UInt16Array();
                    for (int i = 0; i < strs.Length; i++)
                    {
                        channels.Add(Convert.ToUInt16(strs[i]));
                    }
                    RFIDReaderParameter.antennaConfiguration.ReducedPowerChannelList = channels;
                }
            }
            else
            {
                RFIDReaderParameter.antennaConfiguration.ReducedPowerChannelList = UInt16Array.FromString(String.Empty);
            }
            RFIDReaderParameter.antennaConfiguration.LowDutyCycleMode = cbImpinjLowDutyCycleMode.Checked;
            if (cbImpinjLowDutyCycleMode.Checked)
            {
                if (tbxEmptyFieldTimeout.Text.Trim() == String.Empty)
                {
                    MessageBox.Show("Please Input Empty Field Timeout!");
                    return(false);
                }
                else
                {
                    RFIDReaderParameter.antennaConfiguration.EmptyFieldTimeout = Convert.ToUInt16(tbxEmptyFieldTimeout.Text);
                }

                if (tbxFieldPingInterval.Text.Trim() == String.Empty)
                {
                    MessageBox.Show("Please Input Field Ping Interval!");
                    return(false);
                }
                else
                {
                    RFIDReaderParameter.antennaConfiguration.FieldPingInterval = Convert.ToUInt16(tbxFieldPingInterval.Text);
                }
            }
            else
            {
                RFIDReaderParameter.antennaConfiguration.EmptyFieldTimeout = 0;
                RFIDReaderParameter.antennaConfiguration.FieldPingInterval = 0;
            }
            // Antenna Independent Settings
            if (!cbAntenna1.Checked && !cbAntenna2.Checked && !cbAntenna3.Checked && !cbAntenna4.Checked)
            {
                MessageBox.Show("Please choose at least one Antenna!");
                return(false);
            }
            else
            {
                CheckBox[] checkboxs     = new CheckBox[] { cbAntenna1, cbAntenna2, cbAntenna3, cbAntenna4 };
                ComboBox[] comboboxReces = new ComboBox[] { cbReceiverSensitivity1, cbReceiverSensitivity2, cbReceiverSensitivity3, cbReceiverSensitivity4 };
                ComboBox[] comboboxTrans = new ComboBox[] { cbTransmiterPower1, cbTransmiterPower2, cbTransmiterPower3, cbTransmiterPower4 };
                SetAntennaIndependentSettings(checkboxs, comboboxReces, comboboxTrans);
            }
            //------Antenna Confiuration------

            //-----Reader Operation Report Sepc-------
            RFIDReaderParameter.rOReportSpec.SelectedROReportTrigger = cbROReportTrigger.Text;
            RFIDReaderParameter.rOReportSpec.ROReportTriggerN        = Convert.ToUInt16(nudN.Value);
            // Tag Report Content Selector
            RFIDReaderParameter.rOReportSpec.EnableROSpecID  = cbEnableROSpecID.Checked;
            RFIDReaderParameter.rOReportSpec.EnableSpecIndex = cbEnableSpecIndex.Checked;
            RFIDReaderParameter.rOReportSpec.EnableInventoryParameterSPecID = cbEnableInventoryParameterSpecID.Checked;
            RFIDReaderParameter.rOReportSpec.EnableAntennaID          = cbEnableAntennaID.Checked;
            RFIDReaderParameter.rOReportSpec.EnableChannelIndex       = cbEnableChannelIndex.Checked;
            RFIDReaderParameter.rOReportSpec.EnablePeakRSSI           = cbEnablePeakRSSI.Checked;
            RFIDReaderParameter.rOReportSpec.EnableFirstSeenTimestamp = cbEnableFirstSeenTimestamp.Checked;
            RFIDReaderParameter.rOReportSpec.EnableLastSeenTimestamp  = cbEnableLastSeenTimestamp.Checked;
            RFIDReaderParameter.rOReportSpec.EnableTagSeenCount       = cbEnableTagSeenCount.Checked;
            RFIDReaderParameter.rOReportSpec.EnableAccessSpecID       = cbEnableAccessSpecID.Checked;
            RFIDReaderParameter.rOReportSpec.EnableCRC    = cbEnableCRC.Checked;
            RFIDReaderParameter.rOReportSpec.EnablePCbits = cbEnablePCBits.Checked;
            // ImpinJ Tag Report Content Selector
            RFIDReaderParameter.rOReportSpec.ImpinJEnableSerializedTID      = cbImpinjEnableSerializedTID.Checked;
            RFIDReaderParameter.rOReportSpec.ImpinJEnableRFPhaseAngle       = cbImpinjEnableRFPhaseAngle.Checked;
            RFIDReaderParameter.rOReportSpec.ImpinJEnablePeakRSSI           = cbImpinjEnablePeakRSSI.Checked;
            RFIDReaderParameter.rOReportSpec.ImpinJEnableGPSCoordinates     = cbImpinjEnableGPSCoordinates.Checked;
            RFIDReaderParameter.rOReportSpec.ImpinJEnableOptimizedRead      = cbImpinjEnableOptimizedRead.Checked;
            RFIDReaderParameter.rOReportSpec.ImpinJEnableRFDopplerFrequency = cbImpinjEnableRFDopplerFrequency.Checked;
            //-----Reader Operation Report Sepc-------
            return(true);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Send Configurations to Mainfrom through RFIDReaderParameter
        /// </summary>
        public void SendConfigToMainForm()
        {
            //Get parameterd from MoreSettings form
            //------Antenna Confiuration------
            RFIDReaderParameter.AntennaConfiguration.TagInventoryStateAware = Convert.ToBoolean(cbTagInventoryStateAware.Text);
            RFIDReaderParameter.AntennaConfiguration.ModeIndex            = RFIDReaderParameter.ReaderCapabilities.PreDefinedModeTable[cbModeIndex.Text];
            RFIDReaderParameter.AntennaConfiguration.Tari                 = Convert.ToUInt16(tbxTari.Text);
            RFIDReaderParameter.AntennaConfiguration.SelectedSession      = cbSession.Text;
            RFIDReaderParameter.AntennaConfiguration.SelectedSessionIndex = RFIDReaderParameter.ReaderCapabilities.Sessions[cbSession.Text];
            RFIDReaderParameter.AntennaConfiguration.TagPopulation        = Convert.ToUInt16(tbxTagPopulation.Text);
            RFIDReaderParameter.AntennaConfiguration.TagTransitTime       = Convert.ToUInt16(tbxTagTransitTime.Text);
            RFIDReaderParameter.AntennaConfiguration.SelectedSearchMode   = cbImpiJSearchMode.Text;

            RFIDReaderParameter.AntennaConfiguration.ReducedPowerFrequencyMode = cbImpinjReducedPowerFrequencyMode.Checked;
            if (cbImpinjReducedPowerFrequencyMode.Checked)
            {
                string[]    strs     = tbxReducedChannelList.Text.Trim().Split(',');
                UInt16Array channels = new UInt16Array();
                for (int i = 0; i < strs.Length; i++)
                {
                    channels.Add(Convert.ToUInt16(strs[i]));
                }
                RFIDReaderParameter.AntennaConfiguration.ReducedPowerChannelList = channels;
            }
            else
            {
                RFIDReaderParameter.AntennaConfiguration.ReducedPowerChannelList = UInt16Array.FromString(String.Empty);
            }

            RFIDReaderParameter.AntennaConfiguration.LowDutyCycleMode = cbImpinjLowDutyCycleMode.Checked;
            if (cbImpinjLowDutyCycleMode.Checked)
            {
                RFIDReaderParameter.AntennaConfiguration.EmptyFieldTimeout = Convert.ToUInt16(tbxEmptyFieldTimeout.Text);
                RFIDReaderParameter.AntennaConfiguration.FieldPingInterval = Convert.ToUInt16(tbxFieldPingInterval.Text);
            }
            else
            {
                RFIDReaderParameter.AntennaConfiguration.EmptyFieldTimeout = 0;
                RFIDReaderParameter.AntennaConfiguration.FieldPingInterval = 0;
            }

            CheckBox[] checkboxs     = new CheckBox[] { cbAntenna1, cbAntenna2, cbAntenna3, cbAntenna4 };
            ComboBox[] comboboxReces = new ComboBox[] { cbReceiverSensitivity1, cbReceiverSensitivity2, cbReceiverSensitivity3, cbReceiverSensitivity4 };
            ComboBox[] comboboxTrans = new ComboBox[] { cbTransmiterPower1, cbTransmiterPower2, cbTransmiterPower3, cbTransmiterPower4 };
            SetAntennaIndependentSettings(checkboxs, comboboxReces, comboboxTrans);
            //------Antenna Confiuration------

            //-----Reader Operation Report Sepc-------
            RFIDReaderParameter.ROReportSpec.SelectedROReportTrigger = cbROReportTrigger.Text;
            RFIDReaderParameter.ROReportSpec.ROReportTriggerN        = Convert.ToUInt16(nudN.Value);

            RFIDReaderParameter.ROReportSpec.EnableROSpecID  = cbEnableROSpecID.Checked;
            RFIDReaderParameter.ROReportSpec.EnableSpecIndex = cbEnableSpecIndex.Checked;
            RFIDReaderParameter.ROReportSpec.EnableInventoryParameterSPecID = cbEnableInventoryParameterSpecID.Checked;
            RFIDReaderParameter.ROReportSpec.EnableAntennaID          = cbEnableAntennaID.Checked;
            RFIDReaderParameter.ROReportSpec.EnableChannelIndex       = cbEnableChannelIndex.Checked;
            RFIDReaderParameter.ROReportSpec.EnablePeakRSSI           = cbEnablePeakRSSI.Checked;
            RFIDReaderParameter.ROReportSpec.EnableFirstSeenTimestamp = cbEnableFirstSeenTimestamp.Checked;
            RFIDReaderParameter.ROReportSpec.EnableLastSeenTimestamp  = cbEnableLastSeenTimestamp.Checked;
            RFIDReaderParameter.ROReportSpec.EnableTagSeenCount       = cbEnableTagSeenCount.Checked;
            RFIDReaderParameter.ROReportSpec.EnableAccessSpecID       = cbEnableAccessSpecID.Checked;
            RFIDReaderParameter.ROReportSpec.EnableCRC    = cbEnableCRC.Checked;
            RFIDReaderParameter.ROReportSpec.EnablePCbits = cbEnablePCBits.Checked;

            RFIDReaderParameter.ROReportSpec.ImpinJEnableSerializedTID      = cbImpinjEnableSerializedTID.Checked;
            RFIDReaderParameter.ROReportSpec.ImpinJEnableRFPhaseAngle       = cbImpinjEnableRFPhaseAngle.Checked;
            RFIDReaderParameter.ROReportSpec.ImpinJEnablePeakRSSI           = cbImpinjEnablePeakRSSI.Checked;
            RFIDReaderParameter.ROReportSpec.ImpinJEnableGPSCoordinates     = cbImpinjEnableGPSCoordinates.Checked;
            RFIDReaderParameter.ROReportSpec.ImpinJEnableOptimizedRead      = cbImpinjEnableOptimizedRead.Checked;
            RFIDReaderParameter.ROReportSpec.ImpinJEnableRFDopplerFrequency = cbImpinjEnableRFDopplerFrequency.Checked;
            //-----Reader Operation Report Sepc-------
        }