517 lines
25 KiB
Go
517 lines
25 KiB
Go
// Package onviftesting provides testing utilities for ONVIF client testing.
|
|
package onviftesting
|
|
|
|
// OperationSpec defines how to capture an ONVIF operation.
|
|
type OperationSpec struct {
|
|
// Name is the ONVIF operation name (e.g., "GetDeviceInformation")
|
|
Name string
|
|
|
|
// Service is the ONVIF service type
|
|
Service ServiceType
|
|
|
|
// RequiresInit indicates if Initialize() must be called first
|
|
RequiresInit bool
|
|
|
|
// RequiresToken specifies which token parameter is needed (e.g., "ProfileToken")
|
|
RequiresToken string
|
|
|
|
// DependsOn specifies which operation provides the required token
|
|
DependsOn string
|
|
|
|
// Category groups related operations (e.g., "core", "network", "security")
|
|
Category string
|
|
|
|
// IsWrite indicates if this operation modifies camera state
|
|
IsWrite bool
|
|
|
|
// Description provides a brief description of the operation
|
|
Description string
|
|
}
|
|
|
|
// =============================================================================
|
|
// Device Service Operations (97 total, ~35 READ operations)
|
|
// =============================================================================
|
|
|
|
// DeviceReadOperations contains all read-only Device service operations.
|
|
var DeviceReadOperations = []OperationSpec{
|
|
// Core operations
|
|
{Name: "GetDeviceInformation", Service: ServiceDevice, Category: "core",
|
|
Description: "Get manufacturer, model, firmware version"},
|
|
{Name: "GetCapabilities", Service: ServiceDevice, Category: "core",
|
|
Description: "Get service capabilities and endpoints"},
|
|
{Name: "GetServices", Service: ServiceDevice, Category: "core",
|
|
Description: "Get list of available services"},
|
|
{Name: "GetServiceCapabilities", Service: ServiceDevice, Category: "core",
|
|
Description: "Get device service capabilities"},
|
|
|
|
// System operations
|
|
{Name: "GetSystemDateAndTime", Service: ServiceDevice, Category: "system",
|
|
Description: "Get device date and time settings"},
|
|
{Name: "GetSystemLog", Service: ServiceDevice, Category: "system",
|
|
Description: "Get system log"},
|
|
{Name: "GetSystemUris", Service: ServiceDevice, Category: "system",
|
|
Description: "Get system URIs (support, firmware, logs)"},
|
|
{Name: "GetSystemSupportInformation", Service: ServiceDevice, Category: "system",
|
|
Description: "Get system support information"},
|
|
{Name: "GetEndpointReference", Service: ServiceDevice, Category: "system",
|
|
Description: "Get unique endpoint reference address"},
|
|
|
|
// Network operations
|
|
{Name: "GetHostname", Service: ServiceDevice, Category: "network",
|
|
Description: "Get device hostname"},
|
|
{Name: "GetDNS", Service: ServiceDevice, Category: "network",
|
|
Description: "Get DNS configuration"},
|
|
{Name: "GetNTP", Service: ServiceDevice, Category: "network",
|
|
Description: "Get NTP configuration"},
|
|
{Name: "GetNetworkInterfaces", Service: ServiceDevice, Category: "network",
|
|
Description: "Get network interface configuration"},
|
|
{Name: "GetNetworkProtocols", Service: ServiceDevice, Category: "network",
|
|
Description: "Get enabled network protocols"},
|
|
{Name: "GetNetworkDefaultGateway", Service: ServiceDevice, Category: "network",
|
|
Description: "Get default gateway configuration"},
|
|
|
|
// Discovery operations
|
|
{Name: "GetDiscoveryMode", Service: ServiceDevice, Category: "discovery",
|
|
Description: "Get WS-Discovery mode"},
|
|
{Name: "GetRemoteDiscoveryMode", Service: ServiceDevice, Category: "discovery",
|
|
Description: "Get remote discovery mode"},
|
|
|
|
// Scope operations
|
|
{Name: "GetScopes", Service: ServiceDevice, Category: "scopes",
|
|
Description: "Get device scopes for discovery"},
|
|
|
|
// User operations
|
|
{Name: "GetUsers", Service: ServiceDevice, Category: "users",
|
|
Description: "Get list of device users"},
|
|
|
|
// Security operations
|
|
{Name: "GetRemoteUser", Service: ServiceDevice, Category: "security",
|
|
Description: "Get remote user configuration"},
|
|
{Name: "GetIPAddressFilter", Service: ServiceDevice, Category: "security",
|
|
Description: "Get IP address filter rules"},
|
|
{Name: "GetZeroConfiguration", Service: ServiceDevice, Category: "security",
|
|
Description: "Get zero configuration (link-local) settings"},
|
|
{Name: "GetDynamicDNS", Service: ServiceDevice, Category: "security",
|
|
Description: "Get dynamic DNS configuration"},
|
|
{Name: "GetAccessPolicy", Service: ServiceDevice, Category: "security",
|
|
Description: "Get access policy configuration"},
|
|
{Name: "GetPasswordComplexityConfiguration", Service: ServiceDevice, Category: "security",
|
|
Description: "Get password complexity requirements"},
|
|
{Name: "GetPasswordHistoryConfiguration", Service: ServiceDevice, Category: "security",
|
|
Description: "Get password history configuration"},
|
|
{Name: "GetAuthFailureWarningConfiguration", Service: ServiceDevice, Category: "security",
|
|
Description: "Get authentication failure warning settings"},
|
|
|
|
// Certificate operations
|
|
{Name: "GetCertificates", Service: ServiceDevice, Category: "certificates",
|
|
Description: "Get device certificates"},
|
|
{Name: "GetCACertificates", Service: ServiceDevice, Category: "certificates",
|
|
Description: "Get CA certificates"},
|
|
{Name: "GetCertificatesStatus", Service: ServiceDevice, Category: "certificates",
|
|
Description: "Get certificate status"},
|
|
{Name: "GetClientCertificateMode", Service: ServiceDevice, Category: "certificates",
|
|
Description: "Get client certificate mode"},
|
|
|
|
// Storage operations
|
|
{Name: "GetStorageConfigurations", Service: ServiceDevice, Category: "storage",
|
|
Description: "Get storage configurations"},
|
|
|
|
// Relay operations
|
|
{Name: "GetRelayOutputs", Service: ServiceDevice, Category: "relay",
|
|
Description: "Get relay output states"},
|
|
|
|
// Additional operations
|
|
{Name: "GetGeoLocation", Service: ServiceDevice, Category: "additional",
|
|
Description: "Get geographic location"},
|
|
{Name: "GetDPAddresses", Service: ServiceDevice, Category: "additional",
|
|
Description: "Get DP (discovery proxy) addresses"},
|
|
{Name: "GetWsdlURL", Service: ServiceDevice, Category: "additional",
|
|
Description: "Get WSDL URL"},
|
|
|
|
// WiFi operations (802.11)
|
|
{Name: "GetDot11Capabilities", Service: ServiceDevice, Category: "wifi",
|
|
Description: "Get 802.11 capabilities"},
|
|
{Name: "GetDot11Status", Service: ServiceDevice, Category: "wifi",
|
|
Description: "Get 802.11 connection status"},
|
|
{Name: "GetDot1XConfigurations", Service: ServiceDevice, Category: "wifi",
|
|
Description: "Get 802.1X configurations"},
|
|
{Name: "ScanAvailableDot11Networks", Service: ServiceDevice, Category: "wifi",
|
|
Description: "Scan for available WiFi networks"},
|
|
}
|
|
|
|
// =============================================================================
|
|
// Media Service Operations (82 total, ~45 READ operations)
|
|
// =============================================================================
|
|
|
|
// MediaReadOperations contains all read-only Media service operations.
|
|
var MediaReadOperations = []OperationSpec{
|
|
// Service capabilities
|
|
{Name: "GetMediaServiceCapabilities", Service: ServiceMedia, RequiresInit: true, Category: "core",
|
|
Description: "Get media service capabilities"},
|
|
|
|
// Profile operations
|
|
{Name: "GetProfiles", Service: ServiceMedia, RequiresInit: true, Category: "profiles",
|
|
Description: "Get all media profiles"},
|
|
{Name: "GetProfile", Service: ServiceMedia, RequiresInit: true, Category: "profiles",
|
|
RequiresToken: "ProfileToken", DependsOn: "GetProfiles",
|
|
Description: "Get specific profile by token"},
|
|
|
|
// Video source operations
|
|
{Name: "GetVideoSources", Service: ServiceMedia, RequiresInit: true, Category: "video",
|
|
Description: "Get video sources"},
|
|
{Name: "GetVideoSourceConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "video",
|
|
Description: "Get all video source configurations"},
|
|
{Name: "GetVideoSourceConfiguration", Service: ServiceMedia, RequiresInit: true, Category: "video",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetVideoSourceConfigurations",
|
|
Description: "Get specific video source configuration"},
|
|
{Name: "GetVideoSourceConfigurationOptions", Service: ServiceMedia, RequiresInit: true, Category: "video",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetVideoSourceConfigurations",
|
|
Description: "Get video source configuration options"},
|
|
{Name: "GetVideoSourceModes", Service: ServiceMedia, RequiresInit: true, Category: "video",
|
|
RequiresToken: "VideoSourceToken", DependsOn: "GetVideoSources",
|
|
Description: "Get video source modes"},
|
|
{Name: "GetCompatibleVideoSourceConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "video",
|
|
RequiresToken: "ProfileToken", DependsOn: "GetProfiles",
|
|
Description: "Get compatible video source configurations for profile"},
|
|
|
|
// Video encoder operations
|
|
{Name: "GetVideoEncoderConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "encoder",
|
|
Description: "Get all video encoder configurations"},
|
|
{Name: "GetVideoEncoderConfiguration", Service: ServiceMedia, RequiresInit: true, Category: "encoder",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetVideoEncoderConfigurations",
|
|
Description: "Get specific video encoder configuration"},
|
|
{Name: "GetVideoEncoderConfigurationOptions", Service: ServiceMedia, RequiresInit: true, Category: "encoder",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetVideoEncoderConfigurations",
|
|
Description: "Get video encoder configuration options"},
|
|
{Name: "GetCompatibleVideoEncoderConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "encoder",
|
|
RequiresToken: "ProfileToken", DependsOn: "GetProfiles",
|
|
Description: "Get compatible video encoder configurations for profile"},
|
|
{Name: "GetGuaranteedNumberOfVideoEncoderInstances", Service: ServiceMedia, RequiresInit: true, Category: "encoder",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetVideoEncoderConfigurations",
|
|
Description: "Get guaranteed number of video encoder instances"},
|
|
|
|
// Audio source operations
|
|
{Name: "GetAudioSources", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
Description: "Get audio sources"},
|
|
{Name: "GetAudioSourceConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
Description: "Get all audio source configurations"},
|
|
{Name: "GetAudioSourceConfiguration", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetAudioSourceConfigurations",
|
|
Description: "Get specific audio source configuration"},
|
|
{Name: "GetAudioSourceConfigurationOptions", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetAudioSourceConfigurations",
|
|
Description: "Get audio source configuration options"},
|
|
{Name: "GetCompatibleAudioSourceConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
RequiresToken: "ProfileToken", DependsOn: "GetProfiles",
|
|
Description: "Get compatible audio source configurations for profile"},
|
|
|
|
// Audio encoder operations
|
|
{Name: "GetAudioEncoderConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
Description: "Get all audio encoder configurations"},
|
|
{Name: "GetAudioEncoderConfiguration", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetAudioEncoderConfigurations",
|
|
Description: "Get specific audio encoder configuration"},
|
|
{Name: "GetAudioEncoderConfigurationOptions", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetAudioEncoderConfigurations",
|
|
Description: "Get audio encoder configuration options"},
|
|
{Name: "GetCompatibleAudioEncoderConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
RequiresToken: "ProfileToken", DependsOn: "GetProfiles",
|
|
Description: "Get compatible audio encoder configurations for profile"},
|
|
|
|
// Audio output operations
|
|
{Name: "GetAudioOutputs", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
Description: "Get audio outputs"},
|
|
{Name: "GetAudioOutputConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
Description: "Get all audio output configurations"},
|
|
{Name: "GetAudioOutputConfiguration", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetAudioOutputConfigurations",
|
|
Description: "Get specific audio output configuration"},
|
|
{Name: "GetAudioOutputConfigurationOptions", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetAudioOutputConfigurations",
|
|
Description: "Get audio output configuration options"},
|
|
{Name: "GetCompatibleAudioOutputConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
RequiresToken: "ProfileToken", DependsOn: "GetProfiles",
|
|
Description: "Get compatible audio output configurations for profile"},
|
|
|
|
// Audio decoder operations
|
|
{Name: "GetAudioDecoderConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
Description: "Get all audio decoder configurations"},
|
|
{Name: "GetAudioDecoderConfiguration", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetAudioDecoderConfigurations",
|
|
Description: "Get specific audio decoder configuration"},
|
|
{Name: "GetAudioDecoderConfigurationOptions", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetAudioDecoderConfigurations",
|
|
Description: "Get audio decoder configuration options"},
|
|
{Name: "GetCompatibleAudioDecoderConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "audio",
|
|
RequiresToken: "ProfileToken", DependsOn: "GetProfiles",
|
|
Description: "Get compatible audio decoder configurations for profile"},
|
|
|
|
// Metadata operations
|
|
{Name: "GetMetadataConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "metadata",
|
|
Description: "Get all metadata configurations"},
|
|
{Name: "GetMetadataConfiguration", Service: ServiceMedia, RequiresInit: true, Category: "metadata",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetMetadataConfigurations",
|
|
Description: "Get specific metadata configuration"},
|
|
{Name: "GetMetadataConfigurationOptions", Service: ServiceMedia, RequiresInit: true, Category: "metadata",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetMetadataConfigurations",
|
|
Description: "Get metadata configuration options"},
|
|
{Name: "GetCompatibleMetadataConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "metadata",
|
|
RequiresToken: "ProfileToken", DependsOn: "GetProfiles",
|
|
Description: "Get compatible metadata configurations for profile"},
|
|
|
|
// Video analytics operations
|
|
{Name: "GetVideoAnalyticsConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "analytics",
|
|
Description: "Get all video analytics configurations"},
|
|
{Name: "GetVideoAnalyticsConfiguration", Service: ServiceMedia, RequiresInit: true, Category: "analytics",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetVideoAnalyticsConfigurations",
|
|
Description: "Get specific video analytics configuration"},
|
|
{Name: "GetCompatibleVideoAnalyticsConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "analytics",
|
|
RequiresToken: "ProfileToken", DependsOn: "GetProfiles",
|
|
Description: "Get compatible video analytics configurations for profile"},
|
|
|
|
// Stream operations
|
|
{Name: "GetStreamURI", Service: ServiceMedia, RequiresInit: true, Category: "streaming",
|
|
RequiresToken: "ProfileToken", DependsOn: "GetProfiles",
|
|
Description: "Get RTSP stream URI"},
|
|
{Name: "GetSnapshotURI", Service: ServiceMedia, RequiresInit: true, Category: "streaming",
|
|
RequiresToken: "ProfileToken", DependsOn: "GetProfiles",
|
|
Description: "Get snapshot URI"},
|
|
|
|
// OSD operations
|
|
{Name: "GetOSDs", Service: ServiceMedia, RequiresInit: true, Category: "osd",
|
|
Description: "Get all OSD configurations"},
|
|
{Name: "GetOSD", Service: ServiceMedia, RequiresInit: true, Category: "osd",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetOSDs",
|
|
Description: "Get specific OSD configuration"},
|
|
{Name: "GetOSDOptions", Service: ServiceMedia, RequiresInit: true, Category: "osd",
|
|
RequiresToken: "ConfigurationToken", DependsOn: "GetOSDs",
|
|
Description: "Get OSD configuration options"},
|
|
|
|
// PTZ configuration operations (on Media service)
|
|
{Name: "GetCompatiblePTZConfigurations", Service: ServiceMedia, RequiresInit: true, Category: "ptz",
|
|
RequiresToken: "ProfileToken", DependsOn: "GetProfiles",
|
|
Description: "Get compatible PTZ configurations for profile"},
|
|
}
|
|
|
|
// =============================================================================
|
|
// PTZ Service Operations (13 total, ~5 READ operations)
|
|
// =============================================================================
|
|
|
|
// PTZReadOperations contains all read-only PTZ service operations.
|
|
var PTZReadOperations = []OperationSpec{
|
|
{Name: "GetConfigurations", Service: ServicePTZ, RequiresInit: true, Category: "config",
|
|
Description: "Get all PTZ configurations"},
|
|
{Name: "GetConfiguration", Service: ServicePTZ, RequiresInit: true, Category: "config",
|
|
RequiresToken: "PTZConfigurationToken", DependsOn: "GetConfigurations",
|
|
Description: "Get specific PTZ configuration"},
|
|
{Name: "GetStatus", Service: ServicePTZ, RequiresInit: true, Category: "status",
|
|
RequiresToken: "ProfileToken", DependsOn: "GetProfiles",
|
|
Description: "Get PTZ status (position, move status)"},
|
|
{Name: "GetPresets", Service: ServicePTZ, RequiresInit: true, Category: "presets",
|
|
RequiresToken: "ProfileToken", DependsOn: "GetProfiles",
|
|
Description: "Get PTZ presets"},
|
|
{Name: "GetNodes", Service: ServicePTZ, RequiresInit: true, Category: "nodes",
|
|
Description: "Get PTZ nodes"},
|
|
{Name: "GetNode", Service: ServicePTZ, RequiresInit: true, Category: "nodes",
|
|
RequiresToken: "NodeToken", DependsOn: "GetNodes",
|
|
Description: "Get specific PTZ node"},
|
|
}
|
|
|
|
// =============================================================================
|
|
// Imaging Service Operations (7 total, ~4 READ operations)
|
|
// =============================================================================
|
|
|
|
// ImagingReadOperations contains all read-only Imaging service operations.
|
|
var ImagingReadOperations = []OperationSpec{
|
|
{Name: "GetImagingSettings", Service: ServiceImaging, RequiresInit: true, Category: "settings",
|
|
RequiresToken: "VideoSourceToken", DependsOn: "GetVideoSources",
|
|
Description: "Get imaging settings (brightness, contrast, etc.)"},
|
|
{Name: "GetOptions", Service: ServiceImaging, RequiresInit: true, Category: "options",
|
|
RequiresToken: "VideoSourceToken", DependsOn: "GetVideoSources",
|
|
Description: "Get imaging options and ranges"},
|
|
{Name: "GetMoveOptions", Service: ServiceImaging, RequiresInit: true, Category: "options",
|
|
RequiresToken: "VideoSourceToken", DependsOn: "GetVideoSources",
|
|
Description: "Get focus move options"},
|
|
{Name: "GetImagingStatus", Service: ServiceImaging, RequiresInit: true, Category: "status",
|
|
RequiresToken: "VideoSourceToken", DependsOn: "GetVideoSources",
|
|
Description: "Get imaging status (focus status, etc.)"},
|
|
}
|
|
|
|
// =============================================================================
|
|
// Event Service Operations (12 total, ~3 READ operations)
|
|
// =============================================================================
|
|
|
|
// EventReadOperations contains all read-only Event service operations.
|
|
var EventReadOperations = []OperationSpec{
|
|
{Name: "GetEventServiceCapabilities", Service: ServiceEvent, RequiresInit: true, Category: "core",
|
|
Description: "Get event service capabilities"},
|
|
{Name: "GetEventProperties", Service: ServiceEvent, RequiresInit: true, Category: "core",
|
|
Description: "Get event topic properties"},
|
|
{Name: "GetEventBrokers", Service: ServiceEvent, RequiresInit: true, Category: "brokers",
|
|
Description: "Get event brokers"},
|
|
}
|
|
|
|
// =============================================================================
|
|
// DeviceIO Service Operations (14 total, ~11 READ operations)
|
|
// =============================================================================
|
|
|
|
// DeviceIOReadOperations contains all read-only DeviceIO service operations.
|
|
var DeviceIOReadOperations = []OperationSpec{
|
|
{Name: "GetDeviceIOServiceCapabilities", Service: ServiceDeviceIO, RequiresInit: true, Category: "core",
|
|
Description: "Get DeviceIO service capabilities"},
|
|
{Name: "GetDigitalInputs", Service: ServiceDeviceIO, RequiresInit: true, Category: "inputs",
|
|
Description: "Get digital inputs"},
|
|
{Name: "GetDigitalInputConfigurationOptions", Service: ServiceDeviceIO, RequiresInit: true, Category: "inputs",
|
|
Description: "Get digital input configuration options"},
|
|
{Name: "GetVideoOutputs", Service: ServiceDeviceIO, RequiresInit: true, Category: "outputs",
|
|
Description: "Get video outputs"},
|
|
{Name: "GetVideoOutputConfiguration", Service: ServiceDeviceIO, RequiresInit: true, Category: "outputs",
|
|
RequiresToken: "VideoOutputToken", DependsOn: "GetVideoOutputs",
|
|
Description: "Get video output configuration"},
|
|
{Name: "GetVideoOutputConfigurationOptions", Service: ServiceDeviceIO, RequiresInit: true, Category: "outputs",
|
|
RequiresToken: "VideoOutputToken", DependsOn: "GetVideoOutputs",
|
|
Description: "Get video output configuration options"},
|
|
{Name: "GetSerialPorts", Service: ServiceDeviceIO, RequiresInit: true, Category: "serial",
|
|
Description: "Get serial ports"},
|
|
{Name: "GetSerialPortConfiguration", Service: ServiceDeviceIO, RequiresInit: true, Category: "serial",
|
|
RequiresToken: "SerialPortToken", DependsOn: "GetSerialPorts",
|
|
Description: "Get serial port configuration"},
|
|
{Name: "GetSerialPortConfigurationOptions", Service: ServiceDeviceIO, RequiresInit: true, Category: "serial",
|
|
RequiresToken: "SerialPortToken", DependsOn: "GetSerialPorts",
|
|
Description: "Get serial port configuration options"},
|
|
{Name: "GetRelayOutputOptions", Service: ServiceDeviceIO, RequiresInit: true, Category: "relay",
|
|
RequiresToken: "RelayOutputToken",
|
|
Description: "Get relay output options"},
|
|
{Name: "GetAudioOutputs", Service: ServiceDeviceIO, RequiresInit: true, Category: "audio",
|
|
Description: "Get audio outputs (DeviceIO)"},
|
|
}
|
|
|
|
// =============================================================================
|
|
// Aggregation Functions
|
|
// =============================================================================
|
|
|
|
// AllReadOperations returns all READ operations across all services.
|
|
func AllReadOperations() []OperationSpec {
|
|
var all []OperationSpec
|
|
all = append(all, DeviceReadOperations...)
|
|
all = append(all, MediaReadOperations...)
|
|
all = append(all, PTZReadOperations...)
|
|
all = append(all, ImagingReadOperations...)
|
|
all = append(all, EventReadOperations...)
|
|
all = append(all, DeviceIOReadOperations...)
|
|
return all
|
|
}
|
|
|
|
// ReadOperationsByService returns READ operations for a specific service.
|
|
func ReadOperationsByService(service ServiceType) []OperationSpec {
|
|
switch service {
|
|
case ServiceDevice:
|
|
return DeviceReadOperations
|
|
case ServiceMedia:
|
|
return MediaReadOperations
|
|
case ServicePTZ:
|
|
return PTZReadOperations
|
|
case ServiceImaging:
|
|
return ImagingReadOperations
|
|
case ServiceEvent:
|
|
return EventReadOperations
|
|
case ServiceDeviceIO:
|
|
return DeviceIOReadOperations
|
|
case ServiceUnknown:
|
|
return nil
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// IndependentOperations returns operations that don't depend on other operations.
|
|
func IndependentOperations() []OperationSpec {
|
|
var independent []OperationSpec
|
|
for _, op := range AllReadOperations() {
|
|
if op.DependsOn == "" {
|
|
independent = append(independent, op)
|
|
}
|
|
}
|
|
return independent
|
|
}
|
|
|
|
// DependentOperations returns operations that depend on other operations.
|
|
func DependentOperations() []OperationSpec {
|
|
var dependent []OperationSpec
|
|
for _, op := range AllReadOperations() {
|
|
if op.DependsOn != "" {
|
|
dependent = append(dependent, op)
|
|
}
|
|
}
|
|
return dependent
|
|
}
|
|
|
|
// OperationsByDependency returns operations grouped by their dependency.
|
|
func OperationsByDependency(dependsOn string) []OperationSpec {
|
|
var ops []OperationSpec
|
|
for _, op := range AllReadOperations() {
|
|
if op.DependsOn == dependsOn {
|
|
ops = append(ops, op)
|
|
}
|
|
}
|
|
return ops
|
|
}
|
|
|
|
// GetOperationSpec finds an operation by name.
|
|
func GetOperationSpec(name string) *OperationSpec {
|
|
for i := range DeviceReadOperations {
|
|
if DeviceReadOperations[i].Name == name {
|
|
return &DeviceReadOperations[i]
|
|
}
|
|
}
|
|
for i := range MediaReadOperations {
|
|
if MediaReadOperations[i].Name == name {
|
|
return &MediaReadOperations[i]
|
|
}
|
|
}
|
|
for i := range PTZReadOperations {
|
|
if PTZReadOperations[i].Name == name {
|
|
return &PTZReadOperations[i]
|
|
}
|
|
}
|
|
for i := range ImagingReadOperations {
|
|
if ImagingReadOperations[i].Name == name {
|
|
return &ImagingReadOperations[i]
|
|
}
|
|
}
|
|
for i := range EventReadOperations {
|
|
if EventReadOperations[i].Name == name {
|
|
return &EventReadOperations[i]
|
|
}
|
|
}
|
|
for i := range DeviceIOReadOperations {
|
|
if DeviceIOReadOperations[i].Name == name {
|
|
return &DeviceIOReadOperations[i]
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// OperationCount returns the count of operations by service.
|
|
type OperationCount struct {
|
|
Device int
|
|
Media int
|
|
PTZ int
|
|
Imaging int
|
|
Event int
|
|
DeviceIO int
|
|
Total int
|
|
}
|
|
|
|
// GetOperationCount returns the count of READ operations.
|
|
func GetOperationCount() OperationCount {
|
|
return OperationCount{
|
|
Device: len(DeviceReadOperations),
|
|
Media: len(MediaReadOperations),
|
|
PTZ: len(PTZReadOperations),
|
|
Imaging: len(ImagingReadOperations),
|
|
Event: len(EventReadOperations),
|
|
DeviceIO: len(DeviceIOReadOperations),
|
|
Total: len(AllReadOperations()),
|
|
}
|
|
}
|