bool CheckCapabilityAndStateField(string token, DoorCapabilities capabilities, Func <DoorCapabilities, bool> capabilitySelector, string capabilityField, DoorState state, Func <DoorState, bool> stateSelector, string stateField, StringBuilder logger) { bool ok = true; if (capabilitySelector(capabilities)) { if (!stateSelector(state)) { ok = false; logger.AppendLine(string.Format("'{0}' is missing in DoorState, while '{1}' capability is present", stateField, capabilityField)); } } else { if (stateSelector(state)) { ok = false; logger.AppendLine(string.Format("'{0}' is present in DoorState, while '{1}' capability is absent", stateField, capabilityField)); } } return(ok); }
void ValidateDoorCapabilitiesAndState(DoorInfo info, DoorState state) { bool ok = true; StringBuilder logger = new StringBuilder(); DoorCapabilities capabilities = info.Capabilities; //6. Check that if DoorInfo.Capabilities.DoorMonitor = "true", than // DoorState.DoorPhysicalState is present. Otherwise if DoorInfo.Capabilities.DoorMonitor = "false", // than check that DoorState.DoorPhysicalState is skipped. bool local = CheckCapabilityAndStateField(info.token, capabilities, C => C.DoorMonitorSpecified && C.DoorMonitor, "DoorMonitor", state, S => S.DoorPhysicalStateSpecified, "DoorPhysicalState", logger); ok = ok && local; //7. Check that if DoorInfo.Capabilities.LockMonitor = "true", than DoorState.LockPhysicalState // is present. Otherwise if DoorInfo.Capabilities.LockMonitor = "false", than check that // DoorState.LockPhysicalState is skipped. local = CheckCapabilityAndStateField(info.token, capabilities, C => C.LockMonitorSpecified && C.LockMonitor, "LockMonitor", state, S => S.LockPhysicalStateSpecified, "LockPhysicalState", logger); ok = ok && local; //8. Check that if DoorInfo.Capabilities.DoubleLockMonitor = "true", // than DoorState.DoubleLockPhysicalState is present. Otherwise if DoorInfo.Capabilities.DoubleLockMonitor = "false", // than check that DoorState.DoubleLockPhysicalState is skipped. local = CheckCapabilityAndStateField(info.token, capabilities, C => C.DoubleLockMonitorSpecified && C.DoubleLockMonitor, "DoubleLockMonitor", state, S => S.DoubleLockPhysicalStateSpecified, "DoubleLockPhysicalState", logger); ok = ok && local; //9. Check that if DoorInfo.Capabilities.Alarm = "true", than DoorState.Alarm is present. Otherwise // if DoorInfo.Capabilities.Alarm = "false", than check that DoorState.Alarm is skipped. local = CheckCapabilityAndStateField(info.token, capabilities, C => C.AlarmSpecified && C.Alarm, "Alarm", state, S => S.AlarmSpecified, "Alarm", logger); ok = ok && local; //10. Check that if DoorInfo.Capabilities.Tamper = "true", than DoorState.Tamper is present. Otherwise // if DoorInfo.Capabilities.Tamper = "false", than check that DoorState.Tamper is skipped. local = CheckCapabilityAndStateField(info.token, capabilities, C => C.TamperSpecified && C.Tamper, "Tamper", state, S => S.Tamper != null, "Tamper", logger); ok = ok && local; local = CheckCapabilityAndStateField(info.token, capabilities, C => C.FaultSpecified && C.Fault, "Fault", state, S => S.Fault != null, "Fault", logger); ok = ok && local; Assert(ok, logger.ToStringTrimNewLine(), "Validate DoorState and DoorCapabilities"); }
public void DisplayDoorInfo(DoorInfo info) { _door = info; if (info != null) { tbToken.Text = info.token; tbName.Text = info.Name; tbDescription.Text = info.Description; DoorCapabilities capabilities = info.Capabilities; if (capabilities == null) { capabilities = SmcData.Context.Instance.DoorsControl.GetDoorCapabilities(info.token); } if (capabilities != null) { chkBlock.Checked = capabilities.Block && capabilities.BlockSpecified; chkDoubleLock.Checked = capabilities.DoubleLock && capabilities.DoubleLockSpecified; chkLock.Checked = capabilities.Lock && capabilities.LockSpecified; chkLockDown.Checked = capabilities.LockDown && capabilities.LockDownSpecified; chkLockOpen.Checked = capabilities.LockOpen && capabilities.LockOpenSpecified; chkMomentaryAccess.Checked = capabilities.AccessSpecified && capabilities.Access; chkUnlock.Checked = capabilities.Unlock && capabilities.UnlockSpecified; chkAccessTimingOverride.Checked = capabilities.AccessTimingOverrideSpecified && capabilities.AccessTimingOverride; chkAlarm.Checked = capabilities.AlarmSpecified && capabilities.Alarm; chkDoorMonitor.Checked = capabilities.DoorMonitorSpecified && capabilities.DoorMonitor; chkDoubleLockMonitor.Checked = capabilities.DoubleLockMonitorSpecified && capabilities.DoubleLockMonitor; chkLockMonitor.Checked = capabilities.LockMonitorSpecified && capabilities.LockMonitor; chkTamper.Checked = capabilities.TamperSpecified && capabilities.Tamper; chkFault.Checked = capabilities.FaultSpecified && capabilities.Fault; } } else { tbToken.Text = string.Empty; tbName.Text = string.Empty; tbDescription.Text = string.Empty; foreach (CheckBox checkBox in new CheckBox[] { chkBlock, chkDoubleLock, chkLock, chkLockDown, chkLockOpen, chkMomentaryAccess, chkUnlock, chkAccessTimingOverride, chkAlarm, chkDoorMonitor, chkDoubleLockMonitor, chkLockMonitor, chkTamper, chkFault }) { checkBox.Checked = false; } } foreach (Button btn in new Button[] { btnLock, btnDoubleLock, btnAccess, btnBlock, btnLockDown, btnLockOpen, btnUnlock, btnLockDownRelease, btnLockOpenRelease }) { btn.Enabled = info != null; } }
public SimulatorConfiguration NormalConfiguration() { SimulatorConfiguration configuration = new SimulatorConfiguration(); configuration.ServicesConfiguration = new ServicesConfiguration(); DeviceServiceCapabilities deviceServiceCapabilities = new DeviceServiceCapabilities(); deviceServiceCapabilities.Network = new NetworkCapabilities(); deviceServiceCapabilities.Network.Dot11Configuration = true; deviceServiceCapabilities.Network.Dot11ConfigurationSpecified = true; deviceServiceCapabilities.Network.DynDNS = true; deviceServiceCapabilities.Network.Dot11ConfigurationSpecified = true; deviceServiceCapabilities.Network.HostnameFromDHCP = true; deviceServiceCapabilities.Network.HostnameFromDHCPSpecified = true; deviceServiceCapabilities.Network.IPFilter = false; deviceServiceCapabilities.Network.IPFilterSpecified = true; deviceServiceCapabilities.Network.IPVersion6 = false; deviceServiceCapabilities.Network.IPVersion6Specified = true; deviceServiceCapabilities.Network.NTP = 1; deviceServiceCapabilities.Network.NTPSpecified = true; deviceServiceCapabilities.Network.ZeroConfiguration = false; deviceServiceCapabilities.Network.ZeroConfigurationSpecified = true; deviceServiceCapabilities.Security = new SecurityCapabilities(); deviceServiceCapabilities.System = new SystemCapabilities(); deviceServiceCapabilities.System.HttpSystemBackup = true; deviceServiceCapabilities.System.HttpSystemBackupSpecified = true; deviceServiceCapabilities.System.SystemLogging = true; deviceServiceCapabilities.System.SystemLoggingSpecified = true; configuration.ServicesConfiguration.DeviceServiceCapabilities = deviceServiceCapabilities; configuration.ServicesConfiguration.CreateOldStyleCapabilities(); configuration.DeviceInformation = new DeviceInformation(); configuration.DeviceInformation.Brand = "ONVIF"; configuration.DeviceInformation.FirmwareVersion = "1.0"; configuration.DeviceInformation.HardwareId = "12345"; configuration.DeviceInformation.Model = "Ideal PACS Device"; configuration.DeviceInformation.SerialNumber = "123456789"; AccessControlServiceCapabilities accessControlServiceCapabilities = new AccessControlServiceCapabilities(); accessControlServiceCapabilities.DisableAccessPoint = true; accessControlServiceCapabilities.DisableAccessPointSpecified = true; accessControlServiceCapabilities.MaxLimit = 10; configuration.ServicesConfiguration.AccessControlCapabilities = accessControlServiceCapabilities; DoorControlServiceCapabilities doorControlServiceCapabilities = new DoorControlServiceCapabilities(); doorControlServiceCapabilities.MaxLimit = 3; configuration.ServicesConfiguration.DoorServiceCapabilities = doorControlServiceCapabilities; configuration.ServicesConfiguration.InitializeXmlElements(); List <Service> services = new List <Service>(); { Service device = new Service(); device.Namespace = Common.Definitions.OnvifService.DEVICE; device.Version = new OnvifVersion(); device.Version.Major = 2; device.Version.Minor = 2; services.Add(device); } { Service events = new Service(); events.Namespace = Common.Definitions.OnvifService.EVENTS; events.Version = new OnvifVersion(); events.Version.Major = 2; events.Version.Minor = 2; services.Add(events); } { Service pacs = new Service(); pacs.Namespace = Common.Definitions.OnvifService.ACCESSCONTROL; pacs.Version = new OnvifVersion(); pacs.Version.Major = 2; pacs.Version.Minor = 2; services.Add(pacs); } { Service doorControl = new Service(); doorControl.Namespace = Common.Definitions.OnvifService.DOORCONTROL; doorControl.Version = new OnvifVersion(); doorControl.Version.Major = 2; doorControl.Version.Minor = 2; services.Add(doorControl); } configuration.ServicesConfiguration.Services = services; List <Scope> scopes = new List <Scope>(); scopes.Add(new Scope() { ScopeItem = "onvif://www.onvif.org/profile/profilec" }); scopes.Add(new Scope() { ScopeItem = "onvif://www.onvif.org/name/Simulator" }); scopes.Add(new Scope() { ScopeItem = "onvif://www.onvif.org/hardware/PC" }); scopes.Add(new Scope() { ScopeItem = "onvif://www.onvif.org/location/scope1" }); configuration.Scopes = scopes; #region PACS initialization configuration.PacsConfiguration = new PacsConfiguration(); { AccessPointInfo info = new AccessPointInfo(); info.token = "tokenAccessPoint1"; info.Name = "AccessPoint1 Name"; info.Description = "AccessPoint1 Description"; info.AreaFrom = "tokenArea1"; info.AreaTo = "tokenArea2"; info.Enabled = true; info.Type = "tdc:Door"; info.Entity = "tokenDoor1"; info.Capabilities = new AccessPointCapabilities(); info.Capabilities.DisableAccessPoint = true; configuration.PacsConfiguration.AccessPointInfoList.Add(info); } { AccessPointInfo info = new AccessPointInfo(); info.token = "tokenAccessPoint2"; info.Name = "AccessPoint2 Name"; info.Description = "AccessPoint2 Description"; info.Enabled = true; info.Type = "tdc:Door"; info.Entity = "tokenDoor1"; info.Capabilities = new AccessPointCapabilities(); info.Capabilities.DisableAccessPoint = false; configuration.PacsConfiguration.AccessPointInfoList.Add(info); } { AreaInfo info = new AreaInfo(); info.token = "tokenArea1"; info.Name = "Area1 Name"; info.Description = "Area1 Description"; configuration.PacsConfiguration.AreaInfoList.Add(info); } { AreaInfo info = new AreaInfo(); info.token = "tokenArea2"; info.Name = "Area2 Name"; info.Description = "Area2Description"; configuration.PacsConfiguration.AreaInfoList.Add(info); } { DoorInfo info = new DoorInfo(); info.token = "tokenDoor1"; info.Name = "Door1 Name"; info.Description = "Door1 Description"; DoorCapabilities value = new DoorCapabilities(); value.Block = true; value.DoubleLock = true; value.Lock = true; value.LockDown = true; value.LockOpen = true; value.MomentaryAccess = true; value.Unlock = true; info.Capabilities = value; configuration.PacsConfiguration.DoorInfoList.Add(info); } { DoorInfo info = new DoorInfo(); info.token = "tokenDoor2"; info.Name = "Door2 Name"; info.Description = "Door2 Description"; DoorCapabilities value = new DoorCapabilities(); value.Block = false; value.DoubleLock = false; value.Lock = false; value.LockDown = false; value.LockOpen = false; value.MomentaryAccess = false; value.Unlock = false; info.Capabilities = value; configuration.PacsConfiguration.DoorInfoList.Add(info); } foreach (DoorInfo door in configuration.PacsConfiguration.DoorInfoList) { configuration.PacsConfiguration.DoorCapabilitiesList.Add(door.token, door.Capabilities); configuration.PacsConfiguration.DoorAccessList.Add(door.token, 0); configuration.PacsConfiguration.DoorAccessPreviousStateList.Add(door.token, DoorModeType.Unknown); } { DoorState value = new DoorState(); value.DoorAlarm = DoorAlarmStateType.Normal; value.DoorDoubleLockMonitor = DoorLockMonitorStateType.Locked; value.DoorDoubleLockMonitorSpecified = true; value.DoorLockMonitor = DoorLockMonitorStateType.Locked; value.DoorMode = DoorModeType.Locked; value.DoorMonitor = DoorMonitorStateType.Closed; value.DoorTamper = DoorTamperStateType.NotInTamper; configuration.PacsConfiguration.DoorStateList.Add("tokenDoor1", value); } { DoorState value = new DoorState(); value.DoorAlarm = DoorAlarmStateType.Normal; value.DoorDoubleLockMonitor = DoorLockMonitorStateType.NotSupported; value.DoorDoubleLockMonitorSpecified = false; value.DoorLockMonitor = DoorLockMonitorStateType.NotSupported; value.DoorMode = DoorModeType.Locked; value.DoorMonitor = DoorMonitorStateType.NotSupported; value.DoorTamper = DoorTamperStateType.NotSupported; configuration.PacsConfiguration.DoorStateList.Add("tokenDoor2", value); } #endregion return(configuration); }
public void SaveDoorCapabilities(string token, DoorCapabilities capabilities) { _doorCapabilities[token] = capabilities; }