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); } } }
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); } } } }