AUDIOSCIENCE-ASI2816-MIB DEFINITIONS ::= BEGIN

--
-- Top level objects for device monitoring and control
--

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, Integer32 FROM SNMPv2-SMI
    asiSnmpMIBGroups, asiSnmpMIBCompliances FROM AUDIOSCIENCE-SNMP-MIB
    asiSnmpDeviceSpecific                   FROM AUDIOSCIENCE-DEVICESPECIFIC-MIB
    TEXTUAL-CONVENTION, TruthValue          FROM SNMPv2-TC
    OBJECT-GROUP, MODULE-COMPLIANCE         FROM SNMPv2-CONF
;

asiSnmpAsi2816 MODULE-IDENTITY
    LAST-UPDATED "202208310000Z"
    ORGANIZATION "www.audioscience.com"
    CONTACT-INFO "email: support@audioscience.com"
    DESCRIPTION "Top level objects for device monitoring and control"
    REVISION     "202208310000Z"
    DESCRIPTION  "Rev 1"
    ::= { asiSnmpDeviceSpecific 2816 }

--
-- top level structure
--

asi2816ModulesInfo          OBJECT IDENTIFIER ::= { asiSnmpAsi2816 1 }
asi2816CtrlsByType          OBJECT IDENTIFIER ::= { asiSnmpAsi2816 2 }
asi2816CtrlsByLocation      OBJECT IDENTIFIER ::= { asiSnmpAsi2816 3 }

--
-- Helper definitions
--

AsiDBValue ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d-2"
    STATUS       current
    DESCRIPTION  "Value in dB * 100"
    SYNTAX       Integer32

AsiCtrlIndex ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS       current
    DESCRIPTION  "Control index"
    SYNTAX       Integer32 (1..2147483647)

AsiModuleEntryIndex ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS       current
    DESCRIPTION  "Module entry index type syntax"
    SYNTAX       Integer32 (1..256)

AsiString ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "255t"
    STATUS      current
    DESCRIPTION "Placeholder"
    SYNTAX      OCTET STRING (SIZE(1..255))

Asi2816CtrlTypeType ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION  "Enumerate valid control type IDs"
    SYNTAX       INTEGER {
                            tunerCtrl(1),
                            trimLevelCtrl(2),
                            icyStreamCtrl(3),
                            silenceDetectCtrl(4),
                            meterCtrl(5)
                        }

AsiTunerBand ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION  "Enumerate valid tuner band IDs"
    SYNTAX       INTEGER { none(0), am(1), fm(2), wb(3) }

-- AsiTunerStereoMode ::= TEXTUAL-CONVENTION
--     STATUS       current
--     DESCRIPTION  "Enumerate valid tuner stereo modes IDs"
--     SYNTAX       OCTET STRING { auto("auto"), forceMono("force-mono") }

AsiTunerHDRenderingStatus ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION  "Enumerate valid tuner HD rendering modes IDs"
    SYNTAX       INTEGER { none(0), hd(1), blending(2), analog(3) }

AsiTunerHDRenderingMode ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION  "Enumerate valid tuner HD rendering modes IDs"
    SYNTAX       INTEGER { none(0), blend(1), hdOnly(2), analogOnly(3) }

AsiTunerStereoStatus ::= TEXTUAL-CONVENTION
    STATUS       current
    DESCRIPTION  "Enumerate valid tuner stereo modes IDs"
    SYNTAX       INTEGER { none(0), mono(1), stereo(2), forcedMono(3) }

AsiStreamingFormatChannelCount ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "d"
    STATUS       current
    DESCRIPTION  "Number of channels transported in a stream"
    SYNTAX       Integer32 (1..2)

asi2816Groups            OBJECT IDENTIFIER ::= { asiSnmpMIBGroups 3 }
asiDeviceCompliances     OBJECT IDENTIFIER ::= { asiSnmpMIBCompliances 2 }

asi2816Compliances    MODULE-COMPLIANCE
                      STATUS     current
                      DESCRIPTION
                        "Compliance statement for the the entities in this (theSystem) MIB."
                      MODULE
                      MANDATORY-GROUPS {
                        asi2816TunerCtrlGroup,
                        asi2816HDTunerCtrlGroup,
                        asi2816TrimLevelCtrlGroup,
                        asi2816IcyStreamCtrlGroup,
                        asi2816IcyStreamMountPointGroup,
                        asi2816IcyStreamFormatGroup,
                        asi2816SilenceDetectCtrlGroup,
                        asi2816MeterCtrlGroup,
                        asi2816CtrlByLocationGroup,
                        asi2816ModuleEntryGroup,
                        asi2816ModuleGroup
                      } ::= { asiDeviceCompliances 1 }

--
-- Tuner Control: basic fields
--

asi2816TunerCtrlGroup OBJECT-GROUP
    OBJECTS {
            tunerCtrlModuleSlot,
            tunerCtrlTunerNumber,
            tunerCtrlFreqHz,
            tunerCtrlBand,
            tunerCtrlForceMono,
            tunerCtrlStereoStatus,
            tunerCtrlRSSI,
            tunerCtrlSNR,
            tunerCtrlStatusOK
        }
    STATUS  current
    DESCRIPTION "ASI tuner control fields"
    ::= { asi2816Groups 6 }

asi2816TunerCtrlTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF Asi2816TunerCtrlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of tuner controls"
    ::= { asi2816CtrlsByType tunerCtrl(1) 2 } -- Use the convention from RFCs where '2' is used for tables (and '1' is left free for a counter field)

asi2816TunerCtrlEntry OBJECT-TYPE
    SYNTAX      Asi2816TunerCtrlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "An entry containing management information applicable to a
            particular interface."
    INDEX   { tunerCtrlIndex }
    ::= { asi2816TunerCtrlTable 1 }

Asi2816TunerCtrlEntry ::=
    SEQUENCE {
        tunerCtrlIndex          AsiCtrlIndex,
        tunerCtrlModuleSlot     AsiCtrlIndex,
        tunerCtrlTunerNumber    AsiCtrlIndex,
        tunerCtrlFreqHz         Integer32,
        tunerCtrlBand           AsiTunerBand,
        tunerCtrlForceMono      TruthValue,
        tunerCtrlStereoStatus   AsiTunerStereoStatus,
        tunerCtrlRSSI           AsiDBValue,
        tunerCtrlSNR            AsiDBValue,
        tunerCtrlStatusOK       TruthValue
    }


tunerCtrlIndex OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Module information entry index"
    ::= { asi2816TunerCtrlEntry 1 }

tunerCtrlModuleSlot OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Module slot number"
    ::= { asi2816TunerCtrlEntry 2 }

tunerCtrlTunerNumber OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Tuner number on slot"
    ::= { asi2816TunerCtrlEntry 3 }

tunerCtrlFreqHz OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Tuner frequecy in Hz"
    ::= { asi2816TunerCtrlEntry 4 }

tunerCtrlBand OBJECT-TYPE
    SYNTAX      AsiTunerBand
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Tuner band"
    ::= { asi2816TunerCtrlEntry 5 }

tunerCtrlForceMono OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Forced mono boolean flag"
    ::= { asi2816TunerCtrlEntry 6 }

tunerCtrlStereoStatus OBJECT-TYPE
    SYNTAX      AsiTunerStereoStatus
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Stereo status"
    ::= { asi2816TunerCtrlEntry 7 }

tunerCtrlRSSI OBJECT-TYPE
    SYNTAX      AsiDBValue
    UNITS        "dBuV"
    MAX-ACCESS   read-only
    STATUS      current
    DESCRIPTION "Current RSSI value in dBuV"
    DEFVAL { 1400 }
    ::= { asi2816TunerCtrlEntry 8 }

tunerCtrlSNR OBJECT-TYPE
    SYNTAX      AsiDBValue
    UNITS        "dB"
    MAX-ACCESS   read-only
    STATUS      current
    DESCRIPTION "Current SNR value in dB"
    DEFVAL { 1400 }
    ::= { asi2816TunerCtrlEntry 9 }

tunerCtrlStatusOK OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Tuner status OK flag. True when tuner settings are valid and tuner is locked."
    DEFVAL { false }
    ::= { asi2816TunerCtrlEntry 10 }

--
-- Tuner Control: HD radio related fields
--

asi2816HDTunerCtrlGroup OBJECT-GROUP
    OBJECTS {
            tunerCtrlHDProgramIndex,
            tunerCtrlHDProgramsAvailable,
            tunerCtrlHDRenderingMode,
            tunerCtrlHDRenderingStatus
        }
    STATUS  current
    DESCRIPTION "ASI HD tuner control fields"
    ::= { asi2816Groups 10 }

asi2816HDTunerCtrlTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF Asi2816HDTunerCtrlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of HD tuner controls"
    ::= { asi2816CtrlsByType tunerCtrl(1) 3 }

asi2816HDTunerCtrlEntry OBJECT-TYPE
    SYNTAX      Asi2816HDTunerCtrlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "An entry containing management information applicable to a
            particular interface."
    AUGMENTS   { asi2816TunerCtrlEntry }
    ::= { asi2816HDTunerCtrlTable 1 }

Asi2816HDTunerCtrlEntry ::=
    SEQUENCE {
        tunerCtrlHDProgramIndex      AsiCtrlIndex,
        tunerCtrlHDProgramsAvailable AsiString,    -- Comma separated list of available program indices
        tunerCtrlHDRenderingMode     AsiTunerHDRenderingMode,
        tunerCtrlHDRenderingStatus   AsiTunerHDRenderingStatus
    }

tunerCtrlHDProgramIndex OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Currently selected HD program index (1-8)"
    ::= { asi2816HDTunerCtrlEntry 2 }

tunerCtrlHDProgramsAvailable OBJECT-TYPE
    SYNTAX      AsiString
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Comma separated list of available program indices"
    ::= { asi2816HDTunerCtrlEntry 3 }

tunerCtrlHDRenderingMode OBJECT-TYPE
    SYNTAX      AsiTunerHDRenderingMode
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "HD rendering mode"
    ::= { asi2816HDTunerCtrlEntry 4 }

tunerCtrlHDRenderingStatus OBJECT-TYPE
    SYNTAX      AsiTunerHDRenderingStatus
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "HD rendering status"
    ::= { asi2816HDTunerCtrlEntry 5 }

--
-- Trim Level Control
--

asi2816TrimLevelCtrlGroup OBJECT-GROUP
    OBJECTS {
            trimLevelCtrlModuleSlot,
            trimLevelCtrlTunerNumber,
            trimLevelCtrlLevel
        }
    STATUS  current
    DESCRIPTION "ASI trim level control fields"
    ::= { asi2816Groups 3 }

asi2816TrimLevelCtrlTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF Asi2816TrimLevelCtrlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of output trim controls"
    ::= { asi2816CtrlsByType trimLevelCtrl(2) 2 } -- Use the convention from RFCs where '2' is used for tables (and '1' is left free for a counter field)

asi2816TrimLevelCtrlEntry OBJECT-TYPE
    SYNTAX      Asi2816TrimLevelCtrlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "An entry containing management information applicable to a
            particular interface."
    INDEX   { trimLevelCtrlIndex }
    ::= { asi2816TrimLevelCtrlTable 1 }

Asi2816TrimLevelCtrlEntry ::=
    SEQUENCE {
        trimLevelCtrlIndex          AsiCtrlIndex,
        trimLevelCtrlModuleSlot     AsiCtrlIndex,
        trimLevelCtrlTunerNumber    AsiCtrlIndex,
        trimLevelCtrlLevel          AsiDBValue
    }

trimLevelCtrlIndex OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Module information entry index"
    ::= { asi2816TrimLevelCtrlEntry 1 }

trimLevelCtrlModuleSlot OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Module slot number"
    ::= { asi2816TrimLevelCtrlEntry 2 }

trimLevelCtrlTunerNumber OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Tuner number on slot"
    ::= { asi2816TrimLevelCtrlEntry 3 }

trimLevelCtrlLevel OBJECT-TYPE
    SYNTAX      AsiDBValue
    UNITS        "dBu"
    MAX-ACCESS   read-write
    STATUS      current
    DESCRIPTION "Current trim level in dBu"
    DEFVAL { 1400 }
    ::= { asi2816TrimLevelCtrlEntry 4 }


--
-- Icy Streaming Control: basic fields
--

asi2816IcyStreamCtrlGroup OBJECT-GROUP
    OBJECTS {
            icyStreamCtrlModuleSlot,
            icyStreamCtrlTunerNumber,
            icyStreamCtrlEnabled,
            icyStreamCtrlStreaming
        }
    STATUS  current
    DESCRIPTION "ASI trim level control fields"
    ::= { asi2816Groups 4 }

asi2816IcyStreamCtrlTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF Asi2816IcyStreamCtrlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of output trim controls"
    ::= { asi2816CtrlsByType icyStreamCtrl(3) 2 } -- Use the convention from RFCs where '2' is used for tables (and '1' is left free for a counter field)

asi2816IcyStreamCtrlEntry OBJECT-TYPE
    SYNTAX      Asi2816IcyStreamCtrlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "An entry containing management information applicable to a
            particular interface."
    INDEX   { icyStreamCtrlIndex }
    ::= { asi2816IcyStreamCtrlTable 1 }

Asi2816IcyStreamCtrlEntry ::=
    SEQUENCE {
        icyStreamCtrlIndex          AsiCtrlIndex,
        icyStreamCtrlModuleSlot     AsiCtrlIndex,
        icyStreamCtrlTunerNumber    AsiCtrlIndex,
        icyStreamCtrlEnabled        TruthValue,
        icyStreamCtrlStreaming      TruthValue
    }

icyStreamCtrlIndex OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Module information entry index"
    ::= { asi2816IcyStreamCtrlEntry 1 }

icyStreamCtrlModuleSlot OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Module slot number"
    ::= { asi2816IcyStreamCtrlEntry 2 }

icyStreamCtrlTunerNumber OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Tuner number on slot"
    ::= { asi2816IcyStreamCtrlEntry 3 }

icyStreamCtrlEnabled OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Streaming enabled flag"
    DEFVAL { false }
    ::= { asi2816IcyStreamCtrlEntry 4 }

icyStreamCtrlStreaming OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Streaming active flag"
    DEFVAL { false }
    ::= { asi2816IcyStreamCtrlEntry 5 }

--
-- Icy Streaming Control: mount point fields
--

asi2816IcyStreamMountPointGroup OBJECT-GROUP
    OBJECTS {
            icyMountPointHost,
            icyMountPointPath,
            icyMountPointPort,
            icyMountPointUsername,
            icyMountPointPassword
        }
    STATUS  current
    DESCRIPTION "ASI ICY stream mount point fields"
    ::= { asi2816Groups 5 }

icyStreamCtrlMountPointTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF IcyStreamCtrlMountPointEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Mount point fields"
    ::= { asi2816CtrlsByType icyStreamCtrl(3) 3 }

icyStreamCtrlMountPointEntry OBJECT-TYPE
    SYNTAX      IcyStreamCtrlMountPointEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Mount point entry"
    AUGMENTS   { asi2816IcyStreamCtrlEntry }
    ::= { icyStreamCtrlMountPointTable 1 }

IcyStreamCtrlMountPointEntry ::=
    SEQUENCE {
        icyMountPointHost          AsiString,
        icyMountPointPath          AsiString,
        icyMountPointPort          Integer32,
        icyMountPointUsername      AsiString,
        icyMountPointPassword      AsiString
    }

icyMountPointHost OBJECT-TYPE
    SYNTAX      AsiString
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Mount point hostname"
    ::= { icyStreamCtrlMountPointEntry 1 }

icyMountPointPath OBJECT-TYPE
    SYNTAX      AsiString
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Mount point hostname"
    ::= { icyStreamCtrlMountPointEntry 2 }

icyMountPointPort OBJECT-TYPE
    SYNTAX      Integer32 (0..65535)
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Mount point hostname"
    ::= { icyStreamCtrlMountPointEntry 3 }

icyMountPointUsername OBJECT-TYPE
    SYNTAX      AsiString
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Mount point hostname"
    ::= { icyStreamCtrlMountPointEntry 4 }

icyMountPointPassword OBJECT-TYPE
    SYNTAX      AsiString
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Mount point hostname"
    ::= { icyStreamCtrlMountPointEntry 5 }

--
-- Icy Streaming Control: streaming format
--

asi2816IcyStreamFormatGroup OBJECT-GROUP
    OBJECTS {
            icyStreamChannelCount
        }
    STATUS  current
    DESCRIPTION "ASI ICY stream format fields"
    ::= { asi2816Groups 11 }

icyStreamFormatCtrlTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF IcyStreamFormatCtrlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Stream format fields"
    ::= { asi2816CtrlsByType icyStreamCtrl(3) 4 }

icyStreamFormatCtrlEntry OBJECT-TYPE
    SYNTAX      IcyStreamFormatCtrlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Stream format entry"
    AUGMENTS   { asi2816IcyStreamCtrlEntry }
    ::= { icyStreamFormatCtrlTable 1 }

IcyStreamFormatCtrlEntry ::=
    SEQUENCE {
        icyStreamChannelCount      AsiStreamingFormatChannelCount
    }

icyStreamChannelCount OBJECT-TYPE
    SYNTAX      AsiStreamingFormatChannelCount
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Stream channel count"
    ::= { icyStreamFormatCtrlEntry 1 }

--
-- Silence detect Control
--

asi2816SilenceDetectCtrlGroup OBJECT-GROUP
    OBJECTS {
            silenceDetectCtrlModuleSlot,
            silenceDetectCtrlTunerNumber,
            silenceDetectCtrlMinRMSLevel,
            silenceDetectCtrlTriggerInterval,
            silenceDetectCtrlResetInterval,
            silenceDetectCtrlSilence
        }
    STATUS  current
    DESCRIPTION "ASI silence detector control fields"
    ::= { asi2816Groups 8 }

asi2816SilenceDetectCtrlTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF Asi2816SilenceDetectCtrlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of silence detector controls"
    ::= { asi2816CtrlsByType silenceDetectCtrl(4) 2 } -- Use the convention from RFCs where '2' is used for tables (and '1' is left free for a counter field)

asi2816SilenceDetectCtrlEntry OBJECT-TYPE
    SYNTAX      Asi2816SilenceDetectCtrlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "An entry containing management information applicable to a
            particular interface."
    INDEX   { silenceDetectCtrlIndex }
    ::= { asi2816SilenceDetectCtrlTable 1 }

Asi2816SilenceDetectCtrlEntry ::=
    SEQUENCE {
        silenceDetectCtrlIndex          AsiCtrlIndex,
        silenceDetectCtrlModuleSlot     AsiCtrlIndex,
        silenceDetectCtrlTunerNumber    AsiCtrlIndex,
        silenceDetectCtrlMinRMSLevel    AsiDBValue,
        silenceDetectCtrlTriggerInterval    Integer32,
        silenceDetectCtrlSilence        TruthValue,
        silenceDetectCtrlResetInterval    Integer32
    }

silenceDetectCtrlIndex OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Control information entry index"
    ::= { asi2816SilenceDetectCtrlEntry 1 }

silenceDetectCtrlModuleSlot OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Module slot number"
    ::= { asi2816SilenceDetectCtrlEntry 2 }

silenceDetectCtrlTunerNumber OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Tuner number on slot"
    ::= { asi2816SilenceDetectCtrlEntry 3 }

silenceDetectCtrlMinRMSLevel OBJECT-TYPE
    SYNTAX      AsiDBValue
    UNITS       "dB"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "RMS level silence threshold in dB-cent"
    DEFVAL { -9000 }
    ::= { asi2816SilenceDetectCtrlEntry 4 }

silenceDetectCtrlTriggerInterval OBJECT-TYPE
    SYNTAX      Integer32
    UNITS       "ms"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Minimum silence interval to trigger silence detection in milliseconds"
    ::= { asi2816SilenceDetectCtrlEntry 5 }

silenceDetectCtrlSilence OBJECT-TYPE
    SYNTAX      TruthValue
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Silence detection flag"
    ::= { asi2816SilenceDetectCtrlEntry 6 }

silenceDetectCtrlResetInterval OBJECT-TYPE
    SYNTAX      Integer32
    UNITS       "ms"
    MAX-ACCESS  read-write
    STATUS      current
    DESCRIPTION "Minimum non-silence interval to reset silence detection in milliseconds"
    ::= { asi2816SilenceDetectCtrlEntry 7 }

--
-- Meter Control
--

asi2816MeterCtrlGroup OBJECT-GROUP
    OBJECTS {
            meterCtrlModuleSlot,
            meterCtrlTunerNumber,
            meterCtrlLevelRMS,
            meterCtrlLevelPeak
        }
    STATUS  current
    DESCRIPTION "ASI meter control fields"
    ::= { asi2816Groups 9 }

asi2816MeterCtrlTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF Asi2816MeterCtrlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of meter controls"
    ::= { asi2816CtrlsByType meterCtrl(5) 2 } -- Use the convention from RFCs where '2' is used for tables (and '1' is left free for a counter field)

asi2816MeterCtrlEntry OBJECT-TYPE
    SYNTAX      Asi2816MeterCtrlEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "An entry containing management information applicable to a
            particular interface."
    INDEX   { meterCtrlIndex, meterCtrlChannelIndex }
    ::= { asi2816MeterCtrlTable 1 }

Asi2816MeterCtrlEntry ::=
    SEQUENCE {
        meterCtrlIndex          AsiCtrlIndex,
        meterCtrlChannelIndex   AsiCtrlIndex,
        meterCtrlModuleSlot     AsiCtrlIndex,
        meterCtrlTunerNumber    AsiCtrlIndex,
        meterCtrlLevelRMS       AsiDBValue,
        meterCtrlLevelPeak      AsiDBValue
    }

meterCtrlIndex OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Control information entry index"
    ::= { asi2816MeterCtrlEntry 1 }

meterCtrlChannelIndex OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Index of channel on this meter"
    ::= { asi2816MeterCtrlEntry 2 }

meterCtrlModuleSlot OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Module slot number"
    ::= { asi2816MeterCtrlEntry 3 }

meterCtrlTunerNumber OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Tuner number on slot"
    ::= { asi2816MeterCtrlEntry 4 }

meterCtrlLevelRMS OBJECT-TYPE
    SYNTAX      AsiDBValue
    UNITS       "dB"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "RMS level in dB-cent"
    DEFVAL { -10000 }
    ::= { asi2816MeterCtrlEntry 5 }

meterCtrlLevelPeak OBJECT-TYPE
    SYNTAX      AsiDBValue
    UNITS       "dB"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Peak level in dB-cent"
    DEFVAL { -10000 }
    ::= { asi2816MeterCtrlEntry 6 }

--
-- Controls by [module].[tuner] subtree
--

asi2816CtrlByLocationGroup OBJECT-GROUP
    OBJECTS {
            asi2816CtrlOID
        }
    STATUS  current
    DESCRIPTION "ASI trim level control fields"
    ::= { asi2816Groups 7 }

asi2816CtrlByLocationTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF Asi2816CtrlByLocationEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of output trim controls"
    ::= { asi2816CtrlsByLocation 2 }

asi2816CtrlByLocationEntry OBJECT-TYPE
    SYNTAX      Asi2816CtrlByLocationEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "An entry containing management information applicable to a
            particular interface."
    INDEX   { asi2816SlotNumber, asi2816TunerNumber, asi2816CtrlType }
    ::= { asi2816CtrlByLocationTable 1 }

Asi2816CtrlByLocationEntry ::=
    SEQUENCE {
        asi2816SlotNumber     AsiCtrlIndex,
        asi2816TunerNumber    AsiCtrlIndex,
        asi2816CtrlType       Asi2816CtrlTypeType,
        asi2816CtrlOID        OBJECT IDENTIFIER
    }

asi2816SlotNumber OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Module slot number"
    ::= { asi2816CtrlByLocationEntry 1 }

asi2816TunerNumber OBJECT-TYPE
    SYNTAX      AsiCtrlIndex
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Tuner number on slot"
    ::= { asi2816CtrlByLocationEntry 2 }

asi2816CtrlType OBJECT-TYPE
    SYNTAX      Asi2816CtrlTypeType
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Tuner number on slot"
    ::= { asi2816CtrlByLocationEntry 3 }

asi2816CtrlOID OBJECT-TYPE
    SYNTAX      OBJECT IDENTIFIER
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Tuner number on slot"
    ::= { asi2816CtrlByLocationEntry 4 }

--
-- Modules Information
--

asi2816ModuleGroup OBJECT-GROUP
    OBJECTS { asi2816ModulesCount }
    STATUS  current
    DESCRIPTION "ASI module information fields"
    ::= { asi2816Groups 1 }

asi2816ModuleEntryGroup OBJECT-GROUP
    OBJECTS {
        asi2816ModulePartNumber,
        asi2816ModuleRevision,
        asi2816ModuleSerial,
        asi2816ModuleSlot,
        asi2816ModuleTunerCount }
    STATUS  current
    DESCRIPTION "ASI module information fields"
    ::= { asi2816Groups 2 }

asi2816ModulesCount OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS   read-only
    STATUS      current
    DESCRIPTION "Manufacturer's name string"
    DEFVAL { 0 }
    ::= { asi2816ModulesInfo 1 }

asi2816ModuleTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF Asi2816ModuleEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Table of installed modules"
    ::= { asi2816ModulesInfo 2 }

asi2816ModuleEntry OBJECT-TYPE
    SYNTAX      Asi2816ModuleEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
            "An entry containing management information applicable to a
            particular interface."
    INDEX   { asi2816ModuleEntryIndex }
    ::= { asi2816ModuleTable 1 }

Asi2816ModuleEntry ::=
    SEQUENCE {
        asi2816ModuleEntryIndex     AsiModuleEntryIndex,
        asi2816ModulePartNumber     AsiString,
        asi2816ModuleRevision       AsiString,
        asi2816ModuleSerial         AsiString,
        asi2816ModuleSlot           Integer32,
        asi2816ModuleTunerCount     Integer32
    }

asi2816ModuleEntryIndex OBJECT-TYPE
    SYNTAX      AsiModuleEntryIndex
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION "Module information entry index"
    ::= { asi2816ModuleEntry 1 }

asi2816ModulePartNumber OBJECT-TYPE
    SYNTAX      AsiString
    MAX-ACCESS   read-only
    STATUS      current
    DESCRIPTION "Part number string"
    DEFVAL { "ASI0000" }
    ::= { asi2816ModuleEntry 2 }

asi2816ModuleRevision OBJECT-TYPE
    SYNTAX      AsiString
    MAX-ACCESS   read-only
    STATUS      current
    DESCRIPTION "Revision string"
    DEFVAL { "A0" }
    ::= { asi2816ModuleEntry 3 }

asi2816ModuleSerial OBJECT-TYPE
    SYNTAX      AsiString
    MAX-ACCESS   read-only
    STATUS      current
    DESCRIPTION "Serial number string"
    DEFVAL { "000000" }
    ::= { asi2816ModuleEntry 4 }

asi2816ModuleSlot OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Module slot number"
    ::= { asi2816ModuleEntry 5 }

asi2816ModuleTunerCount OBJECT-TYPE
    SYNTAX      Integer32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION "Number of tuners on module"
    ::= { asi2816ModuleEntry 6 }

END
