public static void DeviceSetGuardUsers(Device device, List<GuardUser> guardUsers)
		{
			for (int i = 0; i < guardUsers.Count; i++)
				guardUsers[i].Id = i + 1;
				SetConfigurationOperationHelper.ConfirmLongTermOperation(device);
			// Данные таблицы
			var guardUsersCount = (byte) guardUsers.Count; // 1 байт
			var guardUsersBytes = GetGuardUsersByte(guardUsers);

			var bytes = USBManager.CreateBytesArray(guardUsersCount, guardUsersBytes);
			foreach (var guardUser in guardUsers)
			{
				bytes.AddRange(GuardUserDataToBytesList(device, guardUser));
			}

			// Добавление пустых пользователей
			var emptyGuardUser = new GuardUser();
			emptyGuardUser.KeyTM = new string('0', 12);
			emptyGuardUser.Password = "";

			for(int i = guardUsers.Count; i < 80; i++)
			{
				bytes.AddRange(GuardUserDataToBytesList(device, emptyGuardUser));
			}

			var begin = 0x14000;
			for (int i = 0; i < bytes.Count; i = i + 0x100)
			{
				CallbackManager.AddProgress(new FS2ProgressInfo("Запись охранных пользователей", (i * 100) / bytes.Count));
				USBManager.Send(device, "Запись охранных пользователей", 0x02, 0x52, BitConverter.GetBytes(begin + i).Reverse(), Math.Min(bytes.Count - i - 1, 0xFF), bytes.GetRange(i, Math.Min(bytes.Count - i, 0x100)));
			}
		}
		public static List<GuardUser> DeviceGetGuardUsers(Device device)
		{
			var guardUsers = new List<GuardUser>();
			var result = new List<byte>();
			var packetLenght = USBManager.IsUsbDevice(device) ? 0x33 : 0xFF;
			for (var i = 0x14000; i < 0x14E00; i += packetLenght + 1)
			{
				CallbackManager.AddProgress(new FS2ProgressInfo("Чтение охранных пользователей", ((i - 0x14000) / 0x100 * 100) / 14));
				var response = USBManager.Send(device, "Чтение охранных пользователей", 0x01, 0x52, BitConverter.GetBytes(i).Reverse(), packetLenght);
			    if (response.HasError)
			    	throw new FS2Exception(response.Error);
				if (response.Bytes.Count != packetLenght + 1)
					throw new FS2Exception("Количество байт в ответе не совпадает с запрошенным");
			    result.AddRange(response.Bytes);
			}

			var guardUsersCount = result[0];
			//var guardUsersBytes = result.GetRange(1, 13);
			for (int i = 0; i < guardUsersCount; i++)
			{
				var guardUser = new GuardUser();
				guardUser.CanUnSetZone = Convert.ToBoolean((result[i * 46 + 14])&1);
				guardUser.CanSetZone = Convert.ToBoolean((result[i * 46 + 14] >> 1)&1);
				guardUser.Name = BytesHelper.BytesToStringDescription(result.GetRange(i * 46 + 15, 20));
				guardUser.KeyTM = BytesHelper.BytesToString(result.GetRange(i*46 + 35, 6));
				guardUser.Password = BytesToPasswordString(result.GetRange(i * 46 + 41, 3));
				var guardZonesBytes = result.GetRange(i*46 + 44, 16);
				var localZones = GetLocalZones(device);
				for (int j = 0; j < guardZonesBytes.Count; j++)
				{
					if (localZones.Count <= j * 8)
						break;
					for (int k = 0; k < 8; k++)
					{
						if (localZones.Count <= j * 8 + k)
							break;
						if (((guardZonesBytes[j] >> k) & 1) == 1)
						{
							var guardZone = localZones[j*8 + k];
							if (guardZone != null)
								guardUser.ZoneUIDs.Add(guardZone.UID);
						}
					}
				}
				guardUsers.Add(guardUser);
			}
			return guardUsers;
		}
        public UserDetailsViewModel(GuardUser guardUser = null)
        {
            if (guardUser == null)
            {
                Title = "Создать пользователя";
                GuardUser = new GuardUser()
                {
                    Id = 1
                };

                if (FiresecManager.GuardUsers.Count != 0)
                    GuardUser.Id = FiresecManager.GuardUsers.Select(x => x.Id).Max() + 1;
            }
            else
            {
                Title = "Редактировать пользователя";
                GuardUser = guardUser;
            }

            CopyProperies();
        }
		static List<byte> GuardUserDataToBytesList(Device device, GuardUser guardUser)
		{
			var bytes = new List<byte>();
			// Даннные пользователей
			var guardUserAttribute = (byte)(Convert.ToByte(guardUser.CanSetZone) * 2 + Convert.ToByte(guardUser.CanUnSetZone));
			var guardUserName = BytesHelper.StringToBytes(guardUser.Name);
			var guardUserKeyTM = HexStringToByteArray(guardUser.KeyTM);
			var guardUserPassword = PasswordStringToBytes(guardUser.Password);
			var guardZonesBytes = GetGuardZones(device, guardUser);

			bytes.AddRange(USBManager.CreateBytesArray(guardUserAttribute, guardUserName,
			guardUserKeyTM, guardUserPassword, guardZonesBytes));

			return bytes;
		}
		static List<byte> GetGuardZones(Device device, GuardUser guardUser)
		{
			var guardZonesBytes = new List<byte>(16);
			var localZones = GetLocalZones(device);
			var guardZones = new List<Zone>();

			foreach (var zoneUID in guardUser.ZoneUIDs)
			{
				if (!guardZones.Any(x => x.UID == zoneUID))
					guardZones.Add(ConfigurationManager.Zones.FirstOrDefault(x => x.UID == zoneUID));
			}

		
			var localNos = new List<int>();
			foreach (var guardZone in guardZones)
			{
				var localNo = localZones.IndexOf(localZones.FirstOrDefault(x => x.UID == guardZone.UID));
				localNos.Add(localNo);
			}

			for (int i = 0; i < 16; i++)
			{
				guardZonesBytes.Add(new byte());
				for (int j = 0; j < 8; j++)
				{
					if (localNos.Any(x => x == (i * 8 + j)))
						guardZonesBytes[i] += (byte)(1 << j);
				}
			}

			return guardZonesBytes;
		}
		public GuardConfigurationViewModel(Device selectedDevice,
			ObservableCollection<UserViewModel> deviceUsers,
			ObservableCollection<UserViewModel> availableUsers,
			ObservableCollection<Zone> userZones,
			ObservableCollection<Zone> deviceZones)
		{
			Title = "Список охранных пользователей прибора: " + selectedDevice.Driver.ShortName;
			SaveCaption = "Применить";
			deviceUsersViewModel = deviceUsers;
			availableUsersViewModel = availableUsers;
			userZonesViewModel = userZones;
			deviceZonesViewModel = deviceZones;
			SelectedDevice = selectedDevice;

			Users = new ObservableCollection<UserViewModel>();

			//if (FiresecManager.IsFS2Enabled)
			//{
			//    FS2DeviceGetGuardUserListHelper.Run(SelectedDevice);
			//    var guardUsers = FS2DeviceGetGuardUserListHelper.Result;
			//    if (guardUsers != null)
			//    {
			//        for (int i = 0; i < guardUsers.Count; i++)
			//        {
			//            var user = new User();
			//            guardUsers[i].Id = i + 1;
			//            var userViewModel = new UserViewModel(guardUsers[i]);
			//            Users.Add(userViewModel);
			//        }
			//    }
			//}
			//else
			{
				DeviceGetGuardUserListHelper.Run(SelectedDevice);
				var result = DeviceGetGuardUserListHelper.Result;
				if (result != null)
				{
					int CountUsers = byte.Parse(result.ToString().Substring(0, 3));
					for (int i = 0; i < CountUsers; i++)
					{
						var guardUser = new GuardUser();
						guardUser.Id = i + 1;
						guardUser.Name = result.Substring(174 * i + 115, 20);
						guardUser.Password = result.Substring(174 * i + 147, 6);
						var indexOfF = guardUser.Password.IndexOf('F');
						if (indexOfF >= 0)
							guardUser.Password = guardUser.Password.Remove(indexOfF);
						guardUser.CanUnSetZone = (result[174 * i + 107] == '1');
						guardUser.CanSetZone = (result[174 * i + 108] == '1');
						guardUser.KeyTM = result.Substring(174 * i + 135, 12);
						for (int j = 0; j < 64; j++)
						{
							if (result.Substring(174 * i + 153, 64)[j] == '1')
							{
								Zone zone = FiresecManager.Zones.FirstOrDefault(x => FiresecManager.FiresecConfiguration.GetZoneLocalSecNo(x) == j + 1);
								if (zone != null)
									guardUser.ZoneUIDs.Add(zone.UID);
							}
						}
						var userViewModel = new UserViewModel(guardUser);
						Users.Add(userViewModel);
					}
				}
			}

			if (Users.Count > 0)
				SelectedUser = Users.FirstOrDefault();
		}
		public void GetUserZones(GuardUser guardUser)
		{
			UserZones = new ObservableCollection<Zone>();
			foreach (var ZoneUID in guardUser.ZoneUIDs)
			{
				var zone = FiresecManager.Zones.FirstOrDefault(x => x.UID == ZoneUID);
				if (zone != null)
				{
					UserZones.Add(zone);
				}
			}
		}
Exemple #8
0
 public UserViewModel(GuardUser guardUser)
 {
     GuardUser = guardUser;
 }
        void ConvertGuardUsers()
        {
            DeviceConfiguration.GuardUsers = new List<GuardUser>();

            if (FiresecConfiguration.part != null)
            {
                foreach (var innerGuardUser in FiresecConfiguration.part)
                {
                    if (innerGuardUser.type == "guarduser")
                    {
                        var guardUser = new GuardUser()
                        {
                            Id = int.Parse(innerGuardUser.id),
                            Name = innerGuardUser.name
                        };

                        if (innerGuardUser.PinZ != null)
                        {
                            foreach (var partZone in innerGuardUser.PinZ)
                            {
                                guardUser.Zones.Add(int.Parse(partZone.pidz));
                            }
                        }

                        if (innerGuardUser.param != null)
                        {
                            var KeyTMParameter = innerGuardUser.param.FirstOrDefault(x => x.name == "KeyTM");
                            if (KeyTMParameter != null)
                            {
                                guardUser.KeyTM = KeyTMParameter.value;
                            }

                            var DeviceUIDParameter = innerGuardUser.param.FirstOrDefault(x => x.name == "DeviceUID");
                            if (DeviceUIDParameter != null)
                            {
                                guardUser.DeviceUID = new Guid(DeviceUIDParameter.value);
                            }

                            var PasswordParameter = innerGuardUser.param.FirstOrDefault(x => x.name == "Password");
                            if (PasswordParameter != null)
                            {
                                guardUser.Password = PasswordParameter.value;
                            }

                            var FunctionParameter = innerGuardUser.param.FirstOrDefault(x => x.name == "Function");
                            if (FunctionParameter != null)
                            {
                                guardUser.Function = FunctionParameter.value;
                            }

                            var FIOParameter = innerGuardUser.param.FirstOrDefault(x => x.name == "FIO");
                            if (FIOParameter != null)
                            {
                                guardUser.FIO = FIOParameter.value;
                            }

                            var CanSetZoneParameter = innerGuardUser.param.FirstOrDefault(x => x.name == "SetZone");
                            if (CanSetZoneParameter != null)
                            {
                                guardUser.CanSetZone = CanSetZoneParameter.value == "1";
                            }

                            var CanUnSetZoneParameter = innerGuardUser.param.FirstOrDefault(x => x.name == "UnSetZone");
                            if (CanUnSetZoneParameter != null)
                            {
                                guardUser.CanUnSetZone = CanUnSetZoneParameter.value == "1";
                            }
                        }

                        DeviceConfiguration.GuardUsers.Add(guardUser);
                    }
                }
            }
        }