Beispiel #1
0
 /// <summary>
 /// Initializes display names for features tree.
 /// </summary>
 /// <param name="featuresSet"></param>
 public static void Translate(FeaturesSet featuresSet)
 {
     foreach (FeatureNode node in featuresSet.Nodes)
     {
         Translate(node);
     }
 }
Beispiel #2
0
        private void PrintFetures(Font titleFont, Font itemsFont)
        {
            Document.Add(new Paragraph(new Paragraph("Features:", titleFont)));

            FeaturesSet featuresSet = FeaturesSet.CreateFeaturesSet();

            PrintFeaturesTree(itemsFont, featuresSet.Nodes, 10, 10);
        }
Beispiel #3
0
        /// <summary>
        /// Creates features tree. Initializes checked state; sets up mandatory features.
        /// </summary>
        /// <returns></returns>
        public static FeaturesSet CreateFeaturesSet()
        {
            FeaturesSet featuresSet = new FeaturesSet();

            FeatureNode security = new FeatureNode()
            {
                Name    = "Security",
                Feature = Feature.Security,
                Status  = FeatureState.Group
            };

            featuresSet.Nodes.Add(security);

            security.Nodes.Add(new FeatureNode()
            {
                Name = "WSU", Feature = Feature.WSU
            });
            security.Nodes.Add(new FeatureNode()
            {
                Name = "Digest", Feature = Feature.Digest
            });

            FeatureNode discovery = new FeatureNode()
            {
                Name    = "Discovery",
                Feature = Feature.Discovery,
                Status  = FeatureState.Group
            };

            featuresSet.Nodes.Add(discovery);

            discovery.Nodes.Add(new FeatureNode()
            {
                Name = "BYE", Feature = Feature.BYE
            });

            /******************************************/

            FeatureNode deviceService = new FeatureNode()
            {
                Name    = "DeviceService",
                Feature = Feature.DeviceService,
                Status  = FeatureState.Group
            };

            featuresSet.Nodes.Add(deviceService);

            FeatureNode capabilities = new FeatureNode()
            {
                Name = "Capabilities", Feature = Feature.Capabilities, Status = FeatureState.Group
            };

            deviceService.Nodes.Add(capabilities);
            capabilities.Nodes.Add(new FeatureNode()
            {
                Name = "GetCapabilities", Feature = Feature.GetCapabilities
            });
            capabilities.Nodes.Add(new FeatureNode()
            {
                Name = "GetServices", Feature = Feature.GetServices
            });

            FeatureNode network = new FeatureNode()
            {
                Name    = "Network",
                Feature = Feature.Network,
                Status  = FeatureState.Group
            };

            deviceService.Nodes.Add(network);

            network.Nodes.Add(new FeatureNode()
            {
                Name    = "ZeroConfiguration",
                Feature = Feature.ZeroConfiguration
            });
            network.Nodes.Add(new FeatureNode()
            {
                Name = "NTP", Feature = Feature.NTP
            });
            network.Nodes.Add(new FeatureNode()
            {
                Name = "IPv6", Feature = Feature.IPv6
            });

            FeatureNode system = new FeatureNode()
            {
                Name    = "System",
                Feature = Feature.System,
                Status  = FeatureState.Group
            };

            deviceService.Nodes.Add(system);

            FeatureNode systemLog = new FeatureNode()
            {
                Name    = "SystemLog",
                Feature = Feature.SystemLogging
            };

            system.Nodes.Add(systemLog);

            FeatureNode deviceIo = new FeatureNode()
            {
                Name    = "DeviceIo",
                Feature = Feature.DeviceIO,
                Status  = FeatureState.Group
            };

            deviceService.Nodes.Add(deviceIo);

            FeatureNode deviceIoRelayOutputs = new FeatureNode()
            {
                Name    = "DeviceIoRelayOutputs",
                Feature = Feature.DeviceIORelayOutputs
            };

            deviceIo.Nodes.Add(deviceIoRelayOutputs);

            {
                FeatureNode deviceIoRelayOutputsBistable = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsBistable",
                    Feature = Feature.DeviceIORelayOutputsBistable
                };
                FeatureNode deviceIoRelayOutputsBistableOpen = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsBistableOpen",
                    Feature =
                        Feature.DeviceIORelayOutputsBistableOpen
                };
                FeatureNode deviceIoRelayOutputsBistableClosed = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsBistableClosed",
                    Feature =
                        Feature.DeviceIORelayOutputsBistableClosed
                };

                deviceIoRelayOutputsBistable.Nodes.Add(deviceIoRelayOutputsBistableOpen);
                deviceIoRelayOutputsBistable.Nodes.Add(deviceIoRelayOutputsBistableClosed);

                deviceIoRelayOutputs.Nodes.Add(deviceIoRelayOutputsBistable);
            }

            {
                FeatureNode deviceIoRelayOutputsMonostable = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsMonostable",
                    Feature = Feature.DeviceIORelayOutputsMonostable
                };

                FeatureNode deviceIoRelayOutputsMonostableOpen = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsMonostableOpen",
                    Feature =
                        Feature.DeviceIORelayOutputsMonostableOpen
                };
                FeatureNode deviceIoRelayOutputsMonostableClosed = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsMonostableClosed",
                    Feature =
                        Feature.DeviceIORelayOutputsMonostableClosed
                };

                deviceIoRelayOutputsMonostable.Nodes.Add(deviceIoRelayOutputsMonostableOpen);
                deviceIoRelayOutputsMonostable.Nodes.Add(deviceIoRelayOutputsMonostableClosed);

                deviceIoRelayOutputs.Nodes.Add(deviceIoRelayOutputsMonostable);
            }

            FeatureNode events = new FeatureNode()
            {
                Name = "Events", Feature = Feature.EventsService
            };

            featuresSet.Nodes.Add(events);

            FeatureNode media = new FeatureNode()
            {
                Name = "Media", Feature = Feature.MediaService
            };

            featuresSet.Nodes.Add(media);

            FeatureNode video = new FeatureNode()
            {
                Name = "VideoCodec", Feature = Feature.Video, Status = FeatureState.Group
            };

            media.Nodes.Add(video);
            video.Nodes.Add(new FeatureNode()
            {
                Name = "JPEG", Feature = Feature.JPEG
            });
            video.Nodes.Add(new FeatureNode()
            {
                Name = "H264", Feature = Feature.H264
            });
            video.Nodes.Add(new FeatureNode()
            {
                Name = "MPEG4", Feature = Feature.MPEG4
            });

            FeatureNode audio = new FeatureNode()
            {
                Name = "Audio", Feature = Feature.Audio
            };

            media.Nodes.Add(audio);

            audio.Nodes.Add(new FeatureNode()
            {
                Name = "G711", Feature = Feature.G711
            });
            audio.Nodes.Add(new FeatureNode()
            {
                Name = "G726", Feature = Feature.G726
            });
            audio.Nodes.Add(new FeatureNode()
            {
                Name = "AAC", Feature = Feature.AAC
            });

            FeatureNode backchannel = new FeatureNode()
            {
                Name    = GetDisplayName(Feature.Backchannel),
                Feature = Feature.Backchannel
            };

            media.Nodes.Add(backchannel);
            backchannel.Nodes.Add(new FeatureNode()
            {
                Name = "BackchannelG711", Feature = Feature.BackchannelG711
            });
            backchannel.Nodes.Add(new FeatureNode()
            {
                Name = "BackchannelG726", Feature = Feature.BackchannelG726
            });
            backchannel.Nodes.Add(new FeatureNode()
            {
                Name = "BackchannelAAC", Feature = Feature.BackchannelAAC
            });



            FeatureNode rtss = new FeatureNode()
            {
                Name = "RTSS", Feature = Feature.RTSS, Status = FeatureState.Group
            };

            media.Nodes.Add(rtss);

            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "RTPUDP", Feature = Feature.RTPUDP
            });
            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "RTPRTSPHTTP", Feature = Feature.RTPRTSPHTTP
            });
            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "RTPRTSPTCP", Feature = Feature.RTPRTSPTCP
            });
            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "RTPMulticastUDP", Feature = Feature.RTPMulticastUDP
            });
            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "SnapshotURI", Feature = Feature.SnapshotUri
            });

            FeatureNode ptz = new FeatureNode()
            {
                Name = "PTZ", Feature = Feature.PTZService
            };

            featuresSet.Nodes.Add(ptz);

            FeatureNode ptzAbsolute = new FeatureNode()
            {
                Name = "PTZAbsolute", Feature = Feature.PTZAbsolute
            };

            ptzAbsolute.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltMovement", Feature = Feature.PTZAbsolutePanTilt
            });
            ptzAbsolute.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomMovement", Feature = Feature.PTZAbsoluteZoom
            });
            FeatureNode ptzRelative = new FeatureNode()
            {
                Name = "PTZRelative", Feature = Feature.PTZRelative
            };

            ptzRelative.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltMovement", Feature = Feature.PTZRelativePanTilt
            });
            ptzRelative.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomMovement", Feature = Feature.PTZRelativeZoom
            });
            FeatureNode ptzContinious = new FeatureNode()
            {
                Name = "PTZContinuous", Feature = Feature.PTZContinious
            };

            ptzContinious.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltSpeedConfiguration", Feature = Feature.PTZContinuousPanTilt
            });
            ptzContinious.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomSpeedConfiguration", Feature = Feature.PTZContinuousZoom
            });
            FeatureNode ptzPresets = new FeatureNode()
            {
                Name = "PTZPresets", Feature = Feature.PTZPresets
            };
            FeatureNode ptzHome = new FeatureNode()
            {
                Name = "PTZHome", Feature = Feature.PTZHome
            };

            ptzHome.Nodes.Add(new FeatureNode()
            {
                Name = "ConfigurableHomePosition", Feature = Feature.PTZConfigurableHome
            });
            ptzHome.Nodes.Add(new FeatureNode()
            {
                Name = "FixedHomePosition", Feature = Feature.PTZFixedHome
            });
            FeatureNode ptzAuxiliary = new FeatureNode()
            {
                Name = "PTZAuxiliary", Feature = Feature.PTZAuxiliary
            };
            FeatureNode ptzSpeed = new FeatureNode()
            {
                Name = "PTZSpeed", Feature = Feature.PTZSpeed
            };

            ptzSpeed.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltSpeed", Feature = Feature.PTZSpeedPanTilt
            });
            ptzSpeed.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomSpeed", Feature = Feature.PTZSpeedZoom
            });

            ptz.Nodes.AddRange(new FeatureNode[] { ptzAbsolute, ptzRelative, ptzContinious, ptzPresets, ptzHome, ptzAuxiliary, ptzSpeed });

            FeatureNode io = new FeatureNode()
            {
                Name = "IO", Feature = Feature.DeviceIoService
            };

            featuresSet.Nodes.Add(io);
            io.Nodes.Add(new FeatureNode()
            {
                Name = "RelayOutput", Feature = Feature.RelayOutputs
            });

            FeatureNode imaging = new FeatureNode()
            {
                Name = "Imaging", Feature = Feature.ImagingService
            };

            featuresSet.Nodes.Add(imaging);

            FeatureNode analytics = new FeatureNode()
            {
                Name = "Analytics", Feature = Feature.AnalyticsService
            };

            featuresSet.Nodes.Add(analytics);

            return(featuresSet);
        }
Beispiel #4
0
        /// <summary>
        /// Creates features tree. Initializes checked state; sets up mandatory features.
        /// </summary>
        /// <returns></returns>
        public static FeaturesSet CreateFeaturesSet()
        {
            FeaturesSet featuresSet = new FeaturesSet();

            //
            // MANAGEMENT
            //
            FeatureNode management = new FeatureNode()
            {
                Name        = "Management",
                DisplayName = "Device Management Service",
                Feature     = Feature.ManagementService,
                State       = FeatureState.Optional,
                Enabled     = true
            };

            featuresSet.Nodes.Add(management);
            management.Nodes.Add(new FeatureNode()
            {
                Name = "NTP", DisplayName = GetDisplayName(Feature.NTP), Feature = Feature.NTP
            });
            management.Nodes.Add(new FeatureNode()
            {
                Name = "IPv6", DisplayName = GetDisplayName(Feature.IPv6), Feature = Feature.IPv6
            });

            //
            // EVENTS
            //
            FeatureNode events = new FeatureNode()
            {
                Name        = "Events",
                DisplayName = "Events Service",
                Feature     = Feature.EventsService,
                State       = FeatureState.Optional,
                Enabled     = true
            };

            featuresSet.Nodes.Add(events);

            //
            // MEDIA
            //

            FeatureNode media = new FeatureNode()
            {
                Name        = "Media",
                DisplayName = "Media Service",
                Feature     = Feature.MediaService,
                State       = FeatureState.Optional,
                Enabled     = true
            };

            featuresSet.Nodes.Add(media);

            FeatureNode video = new FeatureNode()
            {
                Name = "VideoCodec", DisplayName = "Video codec", Feature = Feature.Video, Mandatory = true
            };

            media.Nodes.Add(video);
            video.Nodes.Add(new FeatureNode()
            {
                Name = "JPEG", DisplayName = "JPEG", Feature = Feature.JPEG, Mandatory = true
            });
            video.Nodes.Add(new FeatureNode()
            {
                Name = "H264", DisplayName = GetDisplayName(Feature.H264), Feature = Feature.H264
            });
            video.Nodes.Add(new FeatureNode()
            {
                Name = "MPEG4", DisplayName = GetDisplayName(Feature.MPEG4), Feature = Feature.MPEG4
            });

            FeatureNode audio = new FeatureNode()
            {
                Name = "Audio", DisplayName = "Audio", Feature = Feature.Audio
            };

            media.Nodes.Add(audio);

            audio.Nodes.Add(new FeatureNode()
            {
                Name = "G711", DisplayName = "G.711", Feature = Feature.G711, Mandatory = true
            });
            audio.Nodes.Add(new FeatureNode()
            {
                Name = "G726", DisplayName = GetDisplayName(Feature.G726), Feature = Feature.G726
            });
            audio.Nodes.Add(new FeatureNode()
            {
                Name = "AAC", DisplayName = "AAC", Feature = Feature.AAC
            });

            FeatureNode rtss = new FeatureNode()
            {
                Name = "RTSS", DisplayName = "Real-time Streaming Setup", Feature = Feature.RTSS, Mandatory = true
            };

            media.Nodes.Add(rtss);

            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "RTPUDP", DisplayName = "RTP/UDP", Feature = Feature.RTPUDP, Mandatory = true
            });
            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "RTPRTSPHTTP", DisplayName = "RTP/RTSP/HTTP", Feature = Feature.RTPRTSPHTTP, Mandatory = true
            });
            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "RTPRTSPTCP", DisplayName = GetDisplayName(Feature.RTPRTSPTCP), Feature = Feature.RTPRTSPTCP
            });

            //
            // PTZ
            //

            FeatureNode ptz = new FeatureNode()
            {
                Name        = "PTZ",
                DisplayName = GetDisplayName(Feature.PTZ),
                Feature     = Feature.PTZ,
                State       = FeatureState.Optional,
                Enabled     = true
            };

            featuresSet.Nodes.Add(ptz);

            FeatureNode ptzAbsolute = new FeatureNode()
            {
                Name = "PTZAbsolute", DisplayName = "Absolute move", Feature = Feature.PTZAbsolute
            };

            ptzAbsolute.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltMovement", DisplayName = "Pan/Tilt movement", Feature = Feature.PTZAbsolutePanTilt
            });
            ptzAbsolute.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomMovement", DisplayName = "Zoom movement", Feature = Feature.PTZAbsoluteZoom
            });

            FeatureNode ptzRelative = new FeatureNode()
            {
                Name = "PTZRelative", DisplayName = "Relative move", Feature = Feature.PTZRelative
            };

            ptzRelative.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltMovement", DisplayName = "Pan/Tilt movement", Feature = Feature.PTZRelativePanTilt
            });
            ptzRelative.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomMovement", DisplayName = "Zoom movement", Feature = Feature.PTZRelativeZoom
            });

            FeatureNode ptzContinious = new FeatureNode()
            {
                Name = "PTZContinious", DisplayName = "Continous move", Feature = Feature.PTZContinious, Mandatory = true
            };

            ptzContinious.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltSpeedConfiguration", DisplayName = "Pan/Tilt speed configuration", Feature = Feature.PTZContiniousPanTilt
            });
            ptzContinious.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomSpeedConfiguration", DisplayName = "Zoom speed configuration", Feature = Feature.PTZContiniousZoom
            });

            FeatureNode ptzPresets = new FeatureNode()
            {
                Name = "PTZPresets", DisplayName = "Presets", Feature = Feature.PTZPresets
            };

            FeatureNode ptzHome = new FeatureNode()
            {
                Name = "PTZHome", DisplayName = "Home position", Feature = Feature.PTZHome
            };

            ptzHome.Nodes.Add(new FeatureNode()
            {
                Name = "ConfigurableHomePosition", DisplayName = "Configurable home position", Feature = Feature.PTZConfigurableHome
            });
            ptzHome.Nodes.Add(new FeatureNode()
            {
                Name = "FixedHomePosition", DisplayName = "Fixed home position", Feature = Feature.PTZFixedHome
            });

            FeatureNode ptzAuxiliary = new FeatureNode()
            {
                Name = "PTZAuxiliary", DisplayName = "Auxiliary operation", Feature = Feature.PTZAuxiliary
            };

            FeatureNode ptzSpeed = new FeatureNode()
            {
                Name = "PTZSpeed", DisplayName = "Speed", Feature = Feature.PTZSpeed
            };

            ptzSpeed.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltSpeed", DisplayName = "Speed for pan/tilt", Feature = Feature.PTZSpeedPanTilt
            });
            ptzSpeed.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomSpeed", DisplayName = "Speed for zoom", Feature = Feature.PTZSpeedZoom
            });

            ptz.Nodes.AddRange(new FeatureNode[] { ptzAbsolute, ptzRelative, ptzContinious, ptzPresets, ptzHome, ptzAuxiliary, ptzSpeed });

            //foreach (FeatureNode node in featuresSet.Nodes)
            //{
            //    SetupFeatureNode(null, node);
            //}

            return(featuresSet);
        }
Beispiel #5
0
        /// <summary>
        /// Creates features tree. Initializes checked state; sets up mandatory features.
        /// </summary>
        /// <returns></returns>
        public static FeaturesSet CreateFeaturesSet()
        {
            FeaturesSet featuresSet = new FeaturesSet();

            featuresSet.Nodes.Add(new FeatureNode()
            {
                Name = "NTP", DisplayName = GetDisplayName(Feature.NTP), State = FeatureState.Optional, Feature = Feature.NTP
            });

            featuresSet.Nodes.Add(new FeatureNode()
            {
                Name = "IPv6", DisplayName = GetDisplayName(Feature.IPv6), State = FeatureState.Optional, Feature = Feature.IPv6
            });

            FeatureNode video = new FeatureNode()
            {
                Name = "VideoCodec", DisplayName = "Video codec", State = FeatureState.Mandatory, Feature = Feature.Video, Mandatory = true
            };

            featuresSet.Nodes.Add(video);
            video.Nodes.Add(new FeatureNode()
            {
                Name = "JPEG", DisplayName = "JPEG", Feature = Feature.JPEG, Mandatory = true
            });
            video.Nodes.Add(new FeatureNode()
            {
                Name = "H264", DisplayName = GetDisplayName(Feature.H264), Feature = Feature.H264
            });
            video.Nodes.Add(new FeatureNode()
            {
                Name = "MPEG4", DisplayName = GetDisplayName(Feature.MPEG4), Feature = Feature.MPEG4
            });

            FeatureNode audio = new FeatureNode()
            {
                Name = "Audio", DisplayName = "Audio", Feature = Feature.Audio, State = FeatureState.Optional
            };

            featuresSet.Nodes.Add(audio);

            audio.Nodes.Add(new FeatureNode()
            {
                Name = "G711", DisplayName = "G.711", Feature = Feature.G711, Mandatory = true
            });
            audio.Nodes.Add(new FeatureNode()
            {
                Name = "G726", DisplayName = GetDisplayName(Feature.G726), Feature = Feature.G726
            });
            audio.Nodes.Add(new FeatureNode()
            {
                Name = "AAC", DisplayName = "AAC", Feature = Feature.AAC
            });

            //audio.Nodes.Add(new FeatureNode() { Name = GetDisplayName(Feature.Backchannel), DisplayName = GetDisplayName(Feature.Backchannel), Feature = Feature.Backchannel});

            FeatureNode rtss = new FeatureNode()
            {
                Name = "RTSS", DisplayName = "Real-time Streaming Setup", Feature = Feature.RTSS, State = FeatureState.Mandatory, Mandatory = true
            };

            featuresSet.Nodes.Add(rtss);

            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "RTPUDP", DisplayName = "RTP/UDP", Feature = Feature.RTPUDP, Mandatory = true
            });
            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "RTPRTSPHTTP", DisplayName = "RTP/RTSP/HTTP", Feature = Feature.RTPRTSPHTTP, Mandatory = true
            });
            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "RTPRTSPTCP", DisplayName = GetDisplayName(Feature.RTPRTSPTCP), Feature = Feature.RTPRTSPTCP
            });

            //rtss.Nodes.Add(new FeatureNode() { Name = "RTPMulticastUDP", DisplayName = "RTP-Multicast/UDP", Feature = Feature.RTPMulticastUDP});

            /*
             * FeatureNode biDirectional = new FeatureNode() { Name = "Bi-Directional", DisplayName = "Bi-directional", Feature = Feature.BiDirectional, State = FeatureState.Optional };
             * rtss.Nodes.Add(biDirectional);
             *
             * biDirectional.Nodes.Add(new FeatureNode(){Name="BiDirectionalG711", DisplayName = "G.711 Decoder", Feature = Feature.BiDirectionalG711});
             * biDirectional.Nodes.Add(new FeatureNode(){Name="BiDirectionalG726", DisplayName = "G.726 Decoder", Feature = Feature.BiDirectionalG726});
             * biDirectional.Nodes.Add(new FeatureNode(){Name="BiDirectionalAAC", DisplayName = "AAC Decoder", Feature = Feature.BiDirectionalAAC});
             */

            FeatureNode ptz = new FeatureNode()
            {
                Name = "PTZ", DisplayName = GetDisplayName(Feature.PTZ), State = FeatureState.Optional, Feature = Feature.PTZ
            };

            featuresSet.Nodes.Add(ptz);

            FeatureNode ptzAbsolute = new FeatureNode()
            {
                Name = "PTZAbsolute", DisplayName = "Absolute move", Feature = Feature.PTZAbsolute
            };

            ptzAbsolute.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltMovement", DisplayName = "Pan/Tilt movement", Feature = Feature.PTZAbsolutePanTilt
            });
            ptzAbsolute.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomMovement", DisplayName = "Zoom movement", Feature = Feature.PTZAbsoluteZoom
            });

            FeatureNode ptzRelative = new FeatureNode()
            {
                Name = "PTZRelative", DisplayName = "Relative move", Feature = Feature.PTZRelative
            };

            ptzRelative.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltMovement", DisplayName = "Pan/Tilt movement", Feature = Feature.PTZRelativePanTilt
            });
            ptzRelative.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomMovement", DisplayName = "Zoom movement", Feature = Feature.PTZRelativeZoom
            });

            FeatureNode ptzContinious = new FeatureNode()
            {
                Name = "PTZContinious", DisplayName = "Continous move", Feature = Feature.PTZContinious, Mandatory = true
            };

            ptzContinious.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltSpeedConfiguration", DisplayName = "Pan/Tilt speed configuration", Feature = Feature.PTZContiniousPanTilt
            });
            ptzContinious.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomSpeedConfiguration", DisplayName = "Zoom speed configuration", Feature = Feature.PTZContiniousZoom
            });

            FeatureNode ptzPresets = new FeatureNode()
            {
                Name = "PTZPresets", DisplayName = "Presets", Feature = Feature.PTZPresets
            };

            FeatureNode ptzHome = new FeatureNode()
            {
                Name = "PTZHome", DisplayName = "Home position", Feature = Feature.PTZHome
            };

            ptzHome.Nodes.Add(new FeatureNode()
            {
                Name = "ConfigurableHomePosition", DisplayName = "Configurable home position", Feature = Feature.PTZConfigurableHome
            });
            ptzHome.Nodes.Add(new FeatureNode()
            {
                Name = "FixedHomePosition", DisplayName = "Fixed home position", Feature = Feature.PTZFixedHome
            });

            FeatureNode ptzAuxiliary = new FeatureNode()
            {
                Name = "PTZAuxiliary", DisplayName = "Auxiliary operation", Feature = Feature.PTZAuxiliary
            };

            FeatureNode ptzSpeed = new FeatureNode()
            {
                Name = "PTZSpeed", DisplayName = "Speed", Feature = Feature.PTZSpeed
            };

            ptzSpeed.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltSpeed", DisplayName = "Speed for pan/tilt", Feature = Feature.PTZSpeedPanTilt
            });
            ptzSpeed.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomSpeed", DisplayName = "Speed for zoom", Feature = Feature.PTZSpeedZoom
            });

            ptz.Nodes.AddRange(new FeatureNode[] { ptzAbsolute, ptzRelative, ptzContinious, ptzPresets, ptzHome, ptzAuxiliary, ptzSpeed });

            //FeatureNode imaging = new FeatureNode() { Name = "Imaging", DisplayName = GetDisplayName(Feature.Imaging), State = FeatureState.Optional, Feature = Feature.Imaging};
            //featuresSet.Nodes.Add(imaging);

            FeatureNode io = new FeatureNode()
            {
                Name = "IO", DisplayName = GetDisplayName(Feature.IO), State = FeatureState.Optional, Feature = Feature.IO
            };

            featuresSet.Nodes.Add(io);
            io.Nodes.Add(new FeatureNode()
            {
                Name = "RelayOutput", DisplayName = GetDisplayName(Feature.RelayOutputs), Feature = Feature.RelayOutputs
            });


            foreach (FeatureNode node in featuresSet.Nodes)
            {
                SetupFeatureNode(null, node);
            }

            return(featuresSet);
        }