Exemple #1
0
		void InitializeLocalIUDevices()
		{
			var devicesOnShleifs = DevicesOnShleifHelper.GetLocalForZone(ParentPanel, Zone);
			foreach (var devicesOnShleif in devicesOnShleifs)
			{
				var referenceBytesDatabase = new BytesDatabase("Локальные устройства шлейфа " + devicesOnShleif.ShleifNo.ToString() + " для зоны " + Zone.PresentationName);
				ReferenceBytesDatabase.Add(referenceBytesDatabase);

				foreach (var device in devicesOnShleif.Devices)
				{
					TableBase table = PanelDatabase.Tables.FirstOrDefault(x => x.UID == device.UID);
					referenceBytesDatabase.AddReferenceToTable(table, "Ссылка на локальное устройство " + device.PresentationAddressAndName);
				}
				var byteDescription = referenceBytesDatabase.ByteDescriptions.FirstOrDefault();
				BytesDatabase.AddByte(devicesOnShleif.Devices.Count, "Количество связанных локальных ИУ шлейфа " + devicesOnShleif.ShleifNo.ToString());
				BytesDatabase.AddReference(byteDescription, "Указатель на размещение абсолютного адреса размещения первого в списке связанного локального ИУ шлейфа  " + devicesOnShleif.ShleifNo.ToString());
			}
		}
Exemple #2
0
		void InitializeRemoteIUDevices()
		{
			var devices = DevicesOnShleifHelper.GetRemoteForZone(ParentPanel, Zone);
			devices = devices.OrderBy(x => x.IntAddress).ToList();
			BytesDatabase.AddByte(devices.Count, "Количество связанных внешних ИУ");

			var referenceBytesDatabase = new BytesDatabase("Внешние устройства" + " для зоны " + Zone.PresentationName);
			ReferenceBytesDatabase.Add(referenceBytesDatabase);

			foreach (var device in devices)
			{
				TableBase table = PanelDatabase.Tables.FirstOrDefault(x => x.UID == device.UID);
				referenceBytesDatabase.AddReferenceToTable(table, "Ссылка на внешнее устройство " + device.DottedPresentationAddressAndName);
			}

			var byteDescription = referenceBytesDatabase.ByteDescriptions.FirstOrDefault();
			BytesDatabase.AddReference(byteDescription, "Указатель на размещение абсолютного адреса размещения первого в списке связанного внешнего ИУ");
		}
Exemple #3
0
		void CreateLocalDevicesHeaders()
		{
			var devicesOnShleifs = DevicesOnShleifHelper.GetLocalForPanelToMax(FlashDatabase.ParentPanel);
			foreach (var devicesOnShleif in devicesOnShleifs)
			{
				var bytesDatabase = new BytesDatabase("Устройства шлейфа " + devicesOnShleif.ShleifNo.ToString());
				foreach (var device in devicesOnShleif.Devices)
				{
					TableBase table = null;
					var tableName = "Пропуск устройства";
					if (device != null)
					{
						table = FlashDatabase.Tables.FirstOrDefault(x => x.UID == device.UID);
						tableName = "Абсолютный адрес размещения устройства " + device.PresentationAddressAndName;
					}
					bytesDatabase.AddReferenceToTable(table, tableName);
				}
				LocalDevicesBytesDatabase.Add(bytesDatabase);
			}
		}
Exemple #4
0
		void AddRemoteZonesHeaders()
		{
			var tableBase = FlashDatabase.RemoteZonesTableGroup.Tables.FirstOrDefault();
			if(tableBase == null)
				tableBase = FlashDatabase.LocalZonesTableGroup.Tables.FirstOrDefault();
			var bytesDatabase = new BytesDatabase("Указатели Внешние зоны");
			bytesDatabase.AddReferenceToTable(tableBase, "Абсолютный указатель на таблицу");
			bytesDatabase.AddByte(FlashDatabase.RemoteZonesTableGroup.Length, "Длина записи в таблице");
			bytesDatabase.AddShort(FlashDatabase.RemoteZonesTableGroup.Count, "Текущее число записей в таблице");
			BytesDatabase.Add(bytesDatabase);
		}
Exemple #5
0
		void AddServiceTablePointers()
		{
			var bytesDatabase = new BytesDatabase("Указатель Служебную таблицу");
			bytesDatabase.AddReferenceToTable(FlashDatabase.AddressListTable, "Абсолютный указатель на таблицу");
			bytesDatabase.AddByte(1, "Длина записи в таблице");
			bytesDatabase.AddShort(FlashDatabase.AddressListTable.BytesDatabase.ByteDescriptions.Count, "Текущее число записей в таблице");
			BytesDatabase.Add(bytesDatabase);
		}
Exemple #6
0
		public RomDatabase(FlashDatabase flashDatabase, int startOffset)
		{
			FlashDatabase = flashDatabase;
			BytesDatabase = new BytesDatabase();

			var headBytesDatabase = new BytesDatabase("Заголовок");
			if (FlashDatabase.ParentPanel.Driver.DriverType == DriverType.BUNS || FlashDatabase.ParentPanel.Driver.DriverType == DriverType.USB_BUNS)
			{
				headBytesDatabase.AddString("BUNS", "Сигнатура базы", 4);
			}
			else
			{
				headBytesDatabase.AddString("BASE", "Сигнатура базы", 4);
			}
			headBytesDatabase.AddShort(5, "Версия базы");
			headBytesDatabase.AddReference(FlashDatabase.BytesDatabase.ByteDescriptions.Last(), "Абсолютный указатель на конец базы во внешней энергонезависимой паияти");
			var pointerToLast = headBytesDatabase.AddReference((ByteDescription)null, "Абсолютный указатель на конец блока, записываемого в память кристалла");
			BytesDatabase.Add(headBytesDatabase);

			foreach (var tableGroup in FlashDatabase.DevicesTableGroups)
			{
				var bytesDatabase = new BytesDatabase(tableGroup.Name);
				bytesDatabase.AddReferenceToTable(tableGroup.Tables.FirstOrDefault(), tableGroup.Name);
				bytesDatabase.AddByte(tableGroup.ComputedLength, "Длина записи в таблице");
				bytesDatabase.AddShort(tableGroup.Count, "Текущее число записей в таблице");
				BytesDatabase.Add(bytesDatabase);
			}

			var emptyBytesDatabase = new BytesDatabase();
			for (int i = 0; i < 1542 - BytesDatabase.ByteDescriptions.Count; i++)
			{
				emptyBytesDatabase.AddByte(0);
			}
			BytesDatabase.Add(emptyBytesDatabase);

			CreateLocalZonesHeaders();
			CreateRemoteDevicesHeaders();
			CreateDirectionsHeaders();
			CreateLocalDevicesHeaders();
			AddLocalZonesHeaderPointers();
			AddRemoteZonesHeaders();
			AddRemoteDevicesHeadersPointers();
			AddLocalDevicesHeadersPointers();
			AddServiceTablePointers();
			AddDirectionsHeadersPointers();

            BytesDatabase.Add(DirectionsBytesDatabase);
			BytesDatabase.Add(LocalZonesBytesDatabase);
			BytesDatabase.Add(RemoteDevicesBytesDatabase);
			foreach (var localDevicesBytesDatabase in LocalDevicesBytesDatabase)
			{
				BytesDatabase.Add(localDevicesBytesDatabase);
			}

			pointerToLast.AddressReference = BytesDatabase.ByteDescriptions.LastOrDefault();

			BytesDatabase.Order(startOffset);
			BytesDatabase.ResolveTableReferences();
			foreach (var byteDescription in BytesDatabase.ByteDescriptions)
			{
				if (byteDescription.TableBaseReference != null)
				{
					byteDescription.AddressReference = FlashDatabase.BytesDatabase.ByteDescriptions.FirstOrDefault(x => x.TableHeader != null && x.TableHeader.ReferenceUID == byteDescription.TableBaseReference.ReferenceUID);
				}
			}
			BytesDatabase.ResolveReferences();

			var allBytes = BytesDatabase.GetBytes();
			var crc16Value = Crc16Helper.ComputeChecksum(allBytes);
			FlashDatabase.BytesDatabase.SetShort(FlashDatabase.Crc16ByteDescription, crc16Value);
		}
Exemple #7
0
		void CreateDirectionsHeaders()
		{
            var maxDirectionNo = 0;
            var localBinaryPanel = BinaryConfigurationHelper.Current.BinaryPanels.FirstOrDefault(x => x.ParentPanel.UID == this.FlashDatabase.ParentPanel.UID);
            if (localBinaryPanel.TempDirections.Count > 0)
            {
                maxDirectionNo = localBinaryPanel.TempDirections.Max(x => x.Id);
            }
            DirectionsBytesDatabase = new BytesDatabase("Направления");
            for (int i = 1; i <= maxDirectionNo; i++)
            {
                var direction = localBinaryPanel.TempDirections.FirstOrDefault(x => x.Id == i);
                if (direction != null)
                {
                    var table = FlashDatabase.DirectionsTableGroup.Tables.FirstOrDefault(x => x.UID == direction.UID);
                    DirectionsBytesDatabase.AddReferenceToTable(table, "Абсолютный адрес размещения Направления");
                }
                else
                {
                    TableBase table = null;
                    DirectionsBytesDatabase.AddReferenceToTable(table, "Пропуск направления");
                }
            }
		}
Exemple #8
0
		void CreateRemoteDevicesHeaders()
		{
			var bytesDatabase = new BytesDatabase("Внешние устройства");
			foreach (var table in FlashDatabase.RemoteDeviceTables)
			{
				bytesDatabase.AddReferenceToTable(table, "Абсолютный адрес размещения внешнего устройства");
			}
			RemoteDevicesBytesDatabase = bytesDatabase;
		}
Exemple #9
0
		void CreateLocalZonesHeaders()
		{
			var bytesDatabase = new BytesDatabase("Локальные зоны");
			foreach (var table in FlashDatabase.LocalZonesTableGroup.Tables)
			{
				bytesDatabase.AddReferenceToTable(table, "Абсолютный адрес размещения локальной зоны " + (table as ZoneTable).Zone.PresentationName);
			}
			LocalZonesBytesDatabase = bytesDatabase;
		}