Exemple #1
0
        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);
        }
Exemple #2
0
        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;
 }