Example #1
0
        private void AddGatewayTransmission(EndNodeTransmissionLog endNodeTransmission)
        {
            var gatewayTransmissionLog = new GatewayTransmissionLog();

            if (Settings.IsRx1GatewayEnabled)
            {
                // Передача в RX1
                gatewayTransmissionLog.Rx1Channel     = endNodeTransmission.ChannelNumber;
                gatewayTransmissionLog.Rx1StartTimeMs =
                    endNodeTransmission.EndMs +
                    Settings.Rx1PeriodS * 1000;
                gatewayTransmissionLog.Rx1EndTimeMs =
                    gatewayTransmissionLog.Rx1StartTimeMs +
                    GetRx1DownlinkTimeMs();
            }

            if (Settings.IsRx2GatewayEnabled)
            {
                // Передача в RX2
                gatewayTransmissionLog.Rx2StartTimeMs =
                    endNodeTransmission.EndMs +
                    Settings.Rx2PeriodS * 1000;
                gatewayTransmissionLog.Rx2EndTimeMs =
                    gatewayTransmissionLog.Rx2StartTimeMs +
                    GetRx2DownlinkTimeMs();
            }

            _gatewayTransmissionLog.Add(gatewayTransmissionLog);
        }
Example #2
0
        /// <summary>
        /// Возвращает следующую сессию передачи конечного устройства.
        /// Пропускаются пакеты, которые попали во взаимную коллизию
        /// с другими конечными устройствами и те, которые не будут услышаны БС,
        /// из-за того, что БС занята передачей downlink-пакетов.
        /// </summary>
        /// <param name="startTime">Дата начала поиска</param>
        /// <returns></returns>
        public static EndNodeTransmissionLog GetNextReceivedPacket(IEndNode[] endNodes,
                                                                   uint startTime)
        {
            var minimumTransmissionLog = new EndNodeTransmissionLog();

            minimumTransmissionLog.StartMs = uint.MaxValue;
            for (uint i = 0; i < endNodes.Length; i++)
            {
                var endNode = endNodes[i];
                var endNodeTransmissionLog = endNode.GetTransmissionLog();
                for (uint j = 0; j < endNodeTransmissionLog.Length; j++)
                {
                    if (!endNodeTransmissionLog[j].IsPacketCollisionsWithOtherEndNodes)
                    {
                        // Этот пакет не попал в коллизию с остальными
                        var currentTransmissionLog = endNodeTransmissionLog[j];
                        if (currentTransmissionLog.IsPacketCanBeListenByGateway &&
                            currentTransmissionLog.StartMs >= startTime)
                        {
                            // Этот пакет был отправлен позже даты поиска,
                            // ищем наименьший по дате пакет среди тех,
                            // которые не были проигнорированы БС
                            if (currentTransmissionLog.StartMs < minimumTransmissionLog.StartMs)
                            {
                                minimumTransmissionLog = currentTransmissionLog;
                            }
                        }
                    }
                }
            }

            return(minimumTransmissionLog);
        }
        public void CalculateTransmitTime()
        {
            _transmissionLogs = new EndNodeTransmissionLog[
                Settings.GetPacketsCountFromOneNode()];

            uint transmitPeriodMs = Settings.MS_IN_HOUR / Settings.PacketsPerHour;

            uint slotTimeMs = 0;

            for (uint i = 0; i < Settings.GetPacketsCountFromOneNode(); i++)
            {
                var  random     = RandomAccessPoint.GetRandomObject();
                uint randomWait = (uint)random.Next((int)transmitPeriodMs);
                _transmissionLogs[i].StartMs = slotTimeMs + randomWait;
                _transmissionLogs[i].EndMs   = _transmissionLogs[i].StartMs +
                                               GetOnePacketTransmitTimeMs();
                _transmissionLogs[i].ChannelNumber = GetRandomChannelNumber();
                _transmissionLogs[i].IsPacketCanBeListenByGateway = true;

                slotTimeMs += transmitPeriodMs;
            }
        }