public AI_Channels(ref AgilentU254x Driver)
        {
            _pulseBit    = new DigitalBit(new DigitalChannel(DigitalChannelsEnum.DIOD, ref Driver), 0);
            _setResetBit = new DigitalBit(new DigitalChannel(DigitalChannelsEnum.DIOD, ref Driver), 1);

            _selector_A0 = new DigitalBit(new DigitalChannel(DigitalChannelsEnum.DIOB, ref Driver), 0);
            _selector_A1 = new DigitalBit(new DigitalChannel(DigitalChannelsEnum.DIOB, ref Driver), 1);

            _channelModeSwitch = new ChannelModeSwitch(_pulseBit, _setResetBit, _selector_A0, _selector_A1);
            _filter            = new Filter(new DigitalChannel(DigitalChannelsEnum.DIOA, ref Driver));

            HOLD_CS = new DigitalBit(new DigitalChannel(DigitalChannelsEnum.DIOC, ref Driver), 2);
            HOLD_CS.Reset();

            _gainAmplifier = new ProgrammableGainAmplifier(new DigitalChannel(DigitalChannelsEnum.DIOC, ref Driver));

            _latch = new AnalogInLatch(
                _selector_A0,
                _selector_A1,
                new DigitalBit(new DigitalChannel(DigitalChannelsEnum.DIOD, ref Driver), 2));

            _channels = new AI_Channel[4]
            {
                new AI_Channel(AnalogInChannelsEnum.AIn1, ref Driver, _channelModeSwitch, _filter, _gainAmplifier, _latch),
                new AI_Channel(AnalogInChannelsEnum.AIn2, ref Driver, _channelModeSwitch, _filter, _gainAmplifier, _latch),
                new AI_Channel(AnalogInChannelsEnum.AIn3, ref Driver, _channelModeSwitch, _filter, _gainAmplifier, _latch),
                new AI_Channel(AnalogInChannelsEnum.AIn4, ref Driver, _channelModeSwitch, _filter, _gainAmplifier, _latch)
            };
        }
        private void _Set_Enabled(bool Enabled)
        {
            _driver.AnalogOut.set_Enabled(_channelName, Enabled);

            if (Enabled)
            {
                _Enable.Set();
            }
            else
            {
                _Enable.Reset();
            }
        }
        private void _Set_ActiveChennel(BOX_AnalogOutChannelsEnum Channel)
        {
            switch (Channel)
            {
            case BOX_AnalogOutChannelsEnum.BOX_AOut_01:
            {
                _Selector_A0.Reset();
                _Selector_A1.Reset();
                _Selector_A2.Reset();
            } break;

            case BOX_AnalogOutChannelsEnum.BOX_AOut_02:
            {
                _Selector_A0.Set();
                _Selector_A1.Reset();
                _Selector_A2.Reset();
            } break;

            case BOX_AnalogOutChannelsEnum.BOX_AOut_03:
            {
                _Selector_A0.Reset();
                _Selector_A1.Set();
                _Selector_A2.Reset();
            } break;

            case BOX_AnalogOutChannelsEnum.BOX_AOut_04:
            {
                _Selector_A0.Set();
                _Selector_A1.Set();
                _Selector_A2.Reset();
            } break;

            case BOX_AnalogOutChannelsEnum.BOX_AOut_05:
            {
                _Selector_A0.Reset();
                _Selector_A1.Reset();
                _Selector_A2.Set();
            } break;

            case BOX_AnalogOutChannelsEnum.BOX_AOut_06:
            {
                _Selector_A0.Set();
                _Selector_A1.Reset();
                _Selector_A2.Set();
            } break;

            case BOX_AnalogOutChannelsEnum.BOX_AOut_07:
            {
                _Selector_A0.Reset();
                _Selector_A1.Set();
                _Selector_A2.Set();
            } break;

            case BOX_AnalogOutChannelsEnum.BOX_AOut_08:
            {
                _Selector_A0.Set();
                _Selector_A1.Set();
                _Selector_A2.Set();
            } break;

            case BOX_AnalogOutChannelsEnum.BOX_AOut_09:
            {
                _Selector_A0.Reset();
                _Selector_A1.Reset();
                _Selector_A2.Reset();
            } break;

            case BOX_AnalogOutChannelsEnum.BOX_AOut_10:
            {
                _Selector_A0.Set();
                _Selector_A1.Reset();
                _Selector_A2.Reset();
            } break;

            case BOX_AnalogOutChannelsEnum.BOX_AOut_11:
            {
                _Selector_A0.Reset();
                _Selector_A1.Set();
                _Selector_A2.Reset();
            } break;

            case BOX_AnalogOutChannelsEnum.BOX_AOut_12:
            {
                _Selector_A0.Set();
                _Selector_A1.Set();
                _Selector_A2.Reset();
            } break;

            case BOX_AnalogOutChannelsEnum.BOX_AOut_13:
            {
                _Selector_A0.Reset();
                _Selector_A1.Set();
                _Selector_A2.Set();
            } break;

            case BOX_AnalogOutChannelsEnum.BOX_AOut_14:
            {
                _Selector_A0.Set();
                _Selector_A1.Set();
                _Selector_A2.Set();
            } break;

            case BOX_AnalogOutChannelsEnum.BOX_AOut_15:
            {
                _Selector_A0.Set();
                _Selector_A1.Reset();
                _Selector_A2.Set();
            } break;

            case BOX_AnalogOutChannelsEnum.BOX_AOut_16:
            {
                _Selector_A0.Reset();
                _Selector_A1.Reset();
                _Selector_A2.Set();
            } break;

            case BOX_AnalogOutChannelsEnum.NotSet:
            {
            } break;


            default:
                throw new ArgumentException();
            }
        }