public void ShouldSetDacChannelDataSourceAllGroupsAllChannels(
     [Values] DacChannelDataSource dacChannelDataSource
     )
 {
     WhenSetDacChannelDataSource(ChannelAddress.AllGroupsAllChannels, dacChannelDataSource);
     ThenCallIsDelegatedToSetDacChannelDataSourceAllChannelsCommand(dacChannelDataSource);
 }
 private void ThenCallIsDelegatedToSetDacChannelDataSourceAllChannelsCommand(
     DacChannelDataSource dacChannelDataSource)
 {
     Mock.Get(_fakeSetDacChannelDataSourceAllChannelsCommand)
     .Verify(x => x.SetDacChannelDataSourceAllChannels(dacChannelDataSource)
             , Times.Once);
 }
 public void ShouldUpdateABSelectRegistersInDeviceStateCache(
     [Values] ChannelGroup group,
     [Values] DacChannelDataSource channel0,
     [Values] DacChannelDataSource channel1,
     [Values] DacChannelDataSource channel2,
     [Values] DacChannelDataSource channel3,
     [Values] DacChannelDataSource channel4,
     [Values] DacChannelDataSource channel5,
     [Values] DacChannelDataSource channel6,
     [Values] DacChannelDataSource channel7)
 {
     WhenSetDacChannelDataSource(group, channel0, channel1, channel2, channel3, channel4, channel5, channel6,
                                 channel7);
     ThenABSelectRegistersInDeviceStateCacheAreUpdated(
         (int)group,
         (channel0 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel0 : 0) |
         (channel1 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel1 : 0) |
         (channel2 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel2 : 0) |
         (channel3 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel3 : 0) |
         (channel4 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel4 : 0) |
         (channel5 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel5 : 0) |
         (channel6 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel6 : 0) |
         (channel7 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel7 : 0)
         );
 }
 public void ShouldSetDacChannelDataSourceSimultaneouslyForChannelsInSameGroup(
     [Values] ChannelGroup group,
     [Values] DacChannelDataSource channel0,
     [Values] DacChannelDataSource channel1,
     [Values] DacChannelDataSource channel2,
     [Values] DacChannelDataSource channel3,
     [Values] DacChannelDataSource channel4,
     [Values] DacChannelDataSource channel5,
     [Values] DacChannelDataSource channel6,
     [Values] DacChannelDataSource channel7)
 {
     WhenSetDacChannelDataSource(group, channel0, channel1, channel2, channel3, channel4, channel5, channel6,
                                 channel7);
     ThenSendSpecialFunctionCommandShouldBeCalled(
         SpecialFunctionCode.WriteToABSelectRegister0 + (int)group,
         (ushort)(
             (channel0 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel0 : 0) |
             (channel1 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel1 : 0) |
             (channel2 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel2 : 0) |
             (channel3 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel3 : 0) |
             (channel4 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel4 : 0) |
             (channel5 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel5 : 0) |
             (channel6 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel6 : 0) |
             (channel7 == DacChannelDataSource.DataValueB ? ABSelectRegisterBits.Channel7 : 0)
             )
         );
 }
 private void ThenDacChannelDataSourceAllChannelsShouldBe(DacChannelDataSource expected)
 {
     for (var channel = ChannelAddress.Dac0; channel <= ChannelAddress.Dac39; channel++)
     {
         _evalBoard.GetDacChannelDataSource(channel).Should().Be(expected);
     }
 }
        public void SetDacChannelDataSourceAllChannels(DacChannelDataSource source)
        {
            using (_lockFactory.GetLock(LockType.CommandLock))
            {
                switch (source)
                {
                case DacChannelDataSource.DataValueA:
                    _sendSpecialFunctionCommand.SendSpecialFunction(SpecialFunctionCode.BlockWriteABSelectRegisters,
                                                                    (byte)ABSelectRegisterBits.AllChannelsA);
                    _evalBoard.DeviceState.ABSelectRegisters[0] = ABSelectRegisterBits.AllChannelsA;
                    _evalBoard.DeviceState.ABSelectRegisters[1] = ABSelectRegisterBits.AllChannelsA;
                    _evalBoard.DeviceState.ABSelectRegisters[2] = ABSelectRegisterBits.AllChannelsA;
                    _evalBoard.DeviceState.ABSelectRegisters[3] = ABSelectRegisterBits.AllChannelsA;
                    _evalBoard.DeviceState.ABSelectRegisters[4] = ABSelectRegisterBits.AllChannelsA;
                    break;

                case DacChannelDataSource.DataValueB:
                    _sendSpecialFunctionCommand.SendSpecialFunction(SpecialFunctionCode.BlockWriteABSelectRegisters,
                                                                    (byte)ABSelectRegisterBits.AllChannelsB);
                    _evalBoard.DeviceState.ABSelectRegisters[0] = ABSelectRegisterBits.AllChannelsB;
                    _evalBoard.DeviceState.ABSelectRegisters[1] = ABSelectRegisterBits.AllChannelsB;
                    _evalBoard.DeviceState.ABSelectRegisters[2] = ABSelectRegisterBits.AllChannelsB;
                    _evalBoard.DeviceState.ABSelectRegisters[3] = ABSelectRegisterBits.AllChannelsB;
                    _evalBoard.DeviceState.ABSelectRegisters[4] = ABSelectRegisterBits.AllChannelsB;
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(source));
                }
            }
        }
Ejemplo n.º 7
0
 public void ShouldThrowExceptionIfArgumentsAreOutOfRange(
     [Values((int)(ChannelAddress.Dac0 - 1), (int)(ChannelAddress.Dac39 + 1))] ChannelAddress channelAddress,
     [Values((int)(DacChannelDataSource.DataValueA - 1), (int)(DacChannelDataSource.DataValueB + 1))]
     DacChannelDataSource dacChannelDataSource)
 {
     Assert.Throws <ArgumentOutOfRangeException>(
         () => WhenSetDacChannelDataSourceInternal(channelAddress, dacChannelDataSource));
 }
Ejemplo n.º 8
0
 public void ShouldUpdateCorrectABSelectRegister(
     ChannelAddress channelAddress,
     DacChannelDataSource dacChannelDataSource,
     int registerNum
     )
 {
     WhenSetDacChannelDataSourceInternal(channelAddress, dacChannelDataSource);
     ThenABSelectRegisterUpdatedShouldBe(registerNum);
 }
 private void WhenSetDacChannelDataSource(ChannelGroup group, DacChannelDataSource channel0,
                                          DacChannelDataSource channel1, DacChannelDataSource channel2,
                                          DacChannelDataSource channel3, DacChannelDataSource channel4,
                                          DacChannelDataSource channel5, DacChannelDataSource channel6,
                                          DacChannelDataSource channel7)
 {
     _setDacChannelDataSourceCommand.SetDacChannelDataSource(group, channel0, channel1, channel2, channel3,
                                                             channel4, channel5, channel6, channel7);
 }
 public void ShouldSetDacChannelDataSource
 (
     [Range((int)ChannelAddress.Dac0, (int)ChannelAddress.Dac39)] ChannelAddress channelAddress,
     [Values] DacChannelDataSource dacChannelDataSource
 )
 {
     WhenSetDacChannelDataSource(channelAddress, dacChannelDataSource);
     ThenCallShouldBeDelegatedToSetDacChannelDataSourceInternalCommand(channelAddress, dacChannelDataSource);
 }
 public void ShouldSetDacChannelDataSourceAllChannelsInSameGroup(
     ChannelAddress channelAddress,
     DacChannelDataSource dacChannelDataSource,
     byte specialFunctionCode,
     ushort data
     )
 {
     WhenSetDacChannelDataSource(channelAddress, dacChannelDataSource);
     ThenSendSpecialFunctionCommandShouldBeCalled((SpecialFunctionCode)specialFunctionCode, data);
 }
 public void ShouldThrowExceptionIfArgumentsAreOutOfRange(
     [Values((int)(ChannelAddress.AllGroupsAllChannels - 1), (int)(ChannelAddress.Group1Through4Channel7 + 1))]
     ChannelAddress channelAddress,
     [Values((int)(ChannelAddress.AllGroupsAllChannels - 1), (int)(ChannelAddress.Group1Through4Channel7 + 1),
             6, 7)] DacChannelDataSource dacChannelDataSource
     )
 {
     Assert.Throws <ArgumentOutOfRangeException>(
         () => WhenSetDacChannelDataSource(channelAddress, dacChannelDataSource));
 }
 public void ShouldSetAndGetDacChannelDataSourceAllChannels(
     [Values(DacChannelDataSource.DataValueA, DacChannelDataSource.DataValueB)]
     DacChannelDataSource dacChannelDataSource)
 {
     GivenDacChannelDataSourceAllChannels(dacChannelDataSource == DacChannelDataSource.DataValueA
         ? DacChannelDataSource.DataValueB
         : DacChannelDataSource.DataValueA);
     WhenSetDacChannelDataSourceAllChannels(dacChannelDataSource);
     ThenDacChannelDataSourceAllChannelsShouldBe(dacChannelDataSource);
 }
Ejemplo n.º 14
0
 public void ShouldReturnCorrectDacChannelDataSource(
     int abSelectRegisterNumber,
     uint?abSelectRegisterValue,
     ChannelAddress dacChannelAddress,
     DacChannelDataSource expectedDacChannelDataSource)
 {
     GivenABSelectRegisterValue(abSelectRegisterNumber, (ABSelectRegisterBits?)abSelectRegisterValue);
     WhenGetDacChannelDataSource(dacChannelAddress);
     ThenDacChannelDataSourceShouldBe(expectedDacChannelDataSource);
 }
 public void ShouldSetAndGetDacChannelDataSource(
     [Range((int)ChannelAddress.Dac0, (int)ChannelAddress.Dac39)] int channelAddress,
     [Values(DacChannelDataSource.DataValueA, DacChannelDataSource.DataValueB)]
     DacChannelDataSource dacChannelDataSource)
 {
     GivenDacChannelDataSource((ChannelAddress)channelAddress,
                               dacChannelDataSource == DacChannelDataSource.DataValueA
             ? DacChannelDataSource.DataValueB
             : DacChannelDataSource.DataValueA);
     WhenSetAndGetDacChannelDataSource((ChannelAddress)channelAddress, dacChannelDataSource);
     ThenDacChannelDataSourceShouldBe(dacChannelDataSource);
 }
Ejemplo n.º 16
0
 public void ShouldUpdateABSelectRegisterCacheInDeviceState(
     int registerNum,
     byte existingABSelectRegisterBits,
     ChannelAddress channelAddress,
     DacChannelDataSource dacChannelDataSource,
     byte newABSelectRegisterBits
     )
 {
     GivenExistingABSelectRegisterValues(registerNum, (ABSelectRegisterBits)existingABSelectRegisterBits);
     WhenSetDacChannelDataSourceInternal(channelAddress, dacChannelDataSource);
     ThenABSelectRegisterCacheInDeviceStateShouldBe(registerNum, (ABSelectRegisterBits)newABSelectRegisterBits);
 }
Ejemplo n.º 17
0
 public void ShouldApplyExistingABSelectRegisterValuesWhenComputingNewValuesForSingleChannel(
     int registerNum,
     byte existingABSelectRegisterBits,
     ChannelAddress channelAddress,
     DacChannelDataSource dacChannelDataSource,
     byte newABSelectRegisterBits
     )
 {
     GivenExistingABSelectRegisterValues(registerNum, (ABSelectRegisterBits)existingABSelectRegisterBits);
     WhenSetDacChannelDataSourceInternal(channelAddress, dacChannelDataSource);
     ThenNewABSelectRegisterBitsShouldBe((ABSelectRegisterBits)newABSelectRegisterBits);
 }
        private void ThenABSelectRegistersInDeviceStateCacheAreSetAppropriately(
            DacChannelDataSource dacChannelDataSource)
        {
            var theExpectedValue = dacChannelDataSource == DacChannelDataSource.DataValueA
                ? ABSelectRegisterBits.AllChannelsA
                : ABSelectRegisterBits.AllChannelsB;

            _deviceState.ABSelectRegisters[0].Should().Be(theExpectedValue);
            _deviceState.ABSelectRegisters[1].Should().Be(theExpectedValue);
            _deviceState.ABSelectRegisters[2].Should().Be(theExpectedValue);
            _deviceState.ABSelectRegisters[3].Should().Be(theExpectedValue);
            _deviceState.ABSelectRegisters[4].Should().Be(theExpectedValue);
        }
 public void ShouldSetDacChannelDataSourceSameChannelInGroups1To4(
     ChannelAddress groupChannelAddress,
     DacChannelDataSource dacChannelDataSource,
     ChannelAddress group1ChannelAddress,
     ChannelAddress group2ChannelAddress,
     ChannelAddress group3ChannelAddress,
     ChannelAddress group4ChannelAddress
     )
 {
     WhenSetDacChannelDataSource(groupChannelAddress, dacChannelDataSource);
     ThenCallShouldBeDelegatedToSetDacChannelDataSourceInternalCommand(group1ChannelAddress,
                                                                       dacChannelDataSource);
     ThenCallShouldBeDelegatedToSetDacChannelDataSourceInternalCommand(group2ChannelAddress,
                                                                       dacChannelDataSource);
     ThenCallShouldBeDelegatedToSetDacChannelDataSourceInternalCommand(group3ChannelAddress,
                                                                       dacChannelDataSource);
     ThenCallShouldBeDelegatedToSetDacChannelDataSourceInternalCommand(group4ChannelAddress,
                                                                       dacChannelDataSource);
 }
 public void ShouldThrowExceptionIfArgumentsAreOutOfRange(
     [Values((int)(ChannelGroup.Group0 - 1), (int)(ChannelGroup.Group4 + 1))] ChannelGroup channelGroup,
     [Values((int)(ChannelAddress.AllGroupsAllChannels - 1), (int)(ChannelAddress.Group1Through4Channel7 + 1),
             6, 7)] DacChannelDataSource channel0,
     [Values((int)(ChannelAddress.AllGroupsAllChannels - 1), (int)(ChannelAddress.Group1Through4Channel7 + 1),
             6, 7)] DacChannelDataSource channel1,
     [Values((int)(ChannelAddress.AllGroupsAllChannels - 1), (int)(ChannelAddress.Group1Through4Channel7 + 1),
             6, 7)] DacChannelDataSource channel2,
     [Values((int)(ChannelAddress.AllGroupsAllChannels - 1), (int)(ChannelAddress.Group1Through4Channel7 + 1),
             6, 7)] DacChannelDataSource channel3,
     [Values((int)(ChannelAddress.AllGroupsAllChannels - 1), (int)(ChannelAddress.Group1Through4Channel7 + 1),
             6, 7)] DacChannelDataSource channel4,
     [Values((int)(ChannelAddress.AllGroupsAllChannels - 1), (int)(ChannelAddress.Group1Through4Channel7 + 1),
             6, 7)] DacChannelDataSource channel5,
     [Values((int)(ChannelAddress.AllGroupsAllChannels - 1), (int)(ChannelAddress.Group1Through4Channel7 + 1),
             6, 7)] DacChannelDataSource channel6,
     [Values((int)(ChannelAddress.AllGroupsAllChannels - 1), (int)(ChannelAddress.Group1Through4Channel7 + 1),
             6, 7)] DacChannelDataSource channel7)
 {
     Assert.Throws <ArgumentOutOfRangeException>(
         () => WhenSetDacChannelDataSource(channelGroup, channel0, channel1, channel2, channel3, channel4,
                                           channel5, channel6, channel7));
 }
 private void ThenDacChannelDataSourceShouldBe(DacChannelDataSource expected)
 {
     _dacChannelDataSource.Should().Be(expected);
 }
 private void WhenSetAndGetDacChannelDataSource(ChannelAddress channelAddress,
                                                DacChannelDataSource dacChannelDataSource)
 {
     _evalBoard.SetDacChannelDataSource(channelAddress, dacChannelDataSource);
     _dacChannelDataSource = _evalBoard.GetDacChannelDataSource(channelAddress);
 }
 private void WhenSetDacChannelDataSourceAllChannels(DacChannelDataSource dacChannelDataSource)
 {
     _evalBoard.SetDacChannelDataSourceAllChannels(dacChannelDataSource);
 }
 private void GivenDacChannelDataSource(ChannelAddress channelAddress, DacChannelDataSource dacChannelDataSource)
 {
     _evalBoard.SetDacChannelDataSource(channelAddress, dacChannelDataSource);
 }
Ejemplo n.º 25
0
        public void SetDacChannelDataSource(ChannelGroup group, DacChannelDataSource channel0,
                                            DacChannelDataSource channel1, DacChannelDataSource channel2,
                                            DacChannelDataSource channel3, DacChannelDataSource channel4,
                                            DacChannelDataSource channel5, DacChannelDataSource channel6,
                                            DacChannelDataSource channel7)
        {
            using (_lockFactory.GetLock(LockType.CommandLock))
            {
                var abSelectRegisterBits = ABSelectRegisterBits.AllChannelsA;

                if (channel0 == DacChannelDataSource.DataValueB)
                {
                    abSelectRegisterBits |= ABSelectRegisterBits.Channel0;
                }
                if (channel1 == DacChannelDataSource.DataValueB)
                {
                    abSelectRegisterBits |= ABSelectRegisterBits.Channel1;
                }
                if (channel2 == DacChannelDataSource.DataValueB)
                {
                    abSelectRegisterBits |= ABSelectRegisterBits.Channel2;
                }
                if (channel3 == DacChannelDataSource.DataValueB)
                {
                    abSelectRegisterBits |= ABSelectRegisterBits.Channel3;
                }
                if (channel4 == DacChannelDataSource.DataValueB)
                {
                    abSelectRegisterBits |= ABSelectRegisterBits.Channel4;
                }
                if (channel5 == DacChannelDataSource.DataValueB)
                {
                    abSelectRegisterBits |= ABSelectRegisterBits.Channel5;
                }
                if (channel6 == DacChannelDataSource.DataValueB)
                {
                    abSelectRegisterBits |= ABSelectRegisterBits.Channel6;
                }
                if (channel7 == DacChannelDataSource.DataValueB)
                {
                    abSelectRegisterBits |= ABSelectRegisterBits.Channel7;
                }

                var specialFunctionCode = SpecialFunctionCode.NOP;
                var index = 0;
                switch (group)
                {
                case ChannelGroup.Group0:
                    specialFunctionCode = SpecialFunctionCode.WriteToABSelectRegister0;
                    index = 0;
                    break;

                case ChannelGroup.Group1:
                    specialFunctionCode = SpecialFunctionCode.WriteToABSelectRegister1;
                    index = 1;
                    break;

                case ChannelGroup.Group2:
                    specialFunctionCode = SpecialFunctionCode.WriteToABSelectRegister2;
                    index = 2;
                    break;

                case ChannelGroup.Group3:
                    specialFunctionCode = SpecialFunctionCode.WriteToABSelectRegister3;
                    index = 3;
                    break;

                case ChannelGroup.Group4:
                    specialFunctionCode = SpecialFunctionCode.WriteToABSelectRegister4;
                    index = 4;
                    break;
                }
                if (_evalBoard.DeviceState.UseRegisterCache ||
                    _evalBoard.DeviceState.ABSelectRegisters[index] != abSelectRegisterBits)
                {
                    _sendSpecialFunctionCommand.SendSpecialFunction(specialFunctionCode,
                                                                    (byte)abSelectRegisterBits);
                    _evalBoard.DeviceState.ABSelectRegisters[index] = abSelectRegisterBits;
                }
            }
        }
Ejemplo n.º 26
0
 private void ThenDacChannelDataSourceShouldBe(DacChannelDataSource dacChannelDataSource)
 {
     _dacChannelDataSource.Should().Be(dacChannelDataSource);
 }
Ejemplo n.º 27
0
 private void WhenSetDacChannelDataSourceInternal(ChannelAddress channelAddress,
                                                  DacChannelDataSource dacChannelDataSource)
 {
     _setDacChannelDataSourceInternalCommand.SetDacChannelDataSourceInternal(channelAddress,
                                                                             dacChannelDataSource);
 }
 private void WhenSetDacChannelDataSourceAllChannels(DacChannelDataSource dacChannelDataSource)
 {
     _setDacChannelDataSourceAllChannelsCommand.SetDacChannelDataSourceAllChannels(dacChannelDataSource);
 }
Ejemplo n.º 29
0
 public void SetDacChannelDataSource(ChannelAddress channel, DacChannelDataSource value)
 {
     using (_lockFactory.GetLock(LockType.CommandLock))
     {
         if (channel < ChannelAddress.Dac0 || channel > ChannelAddress.Dac39)
         {
             if (channel == ChannelAddress.AllGroupsAllChannels)
             {
                 _setDacChannelDataSourceAllChannelsCommand.SetDacChannelDataSourceAllChannels(value);
                 return;
             }
             if (channel == ChannelAddress.Group0AllChannels)
             {
                 SetDacChannelDataSource(ChannelGroup.Group0, value, value, value, value, value, value, value,
                                         value);
                 return;
             }
             if (channel == ChannelAddress.Group1AllChannels)
             {
                 SetDacChannelDataSource(ChannelGroup.Group1, value, value, value, value, value, value, value,
                                         value);
                 return;
             }
             if (channel == ChannelAddress.Group2AllChannels)
             {
                 SetDacChannelDataSource(ChannelGroup.Group2, value, value, value, value, value, value, value,
                                         value);
                 return;
             }
             if (channel == ChannelAddress.Group3AllChannels)
             {
                 SetDacChannelDataSource(ChannelGroup.Group3, value, value, value, value, value, value, value,
                                         value);
                 return;
             }
             if (channel == ChannelAddress.Group4AllChannels)
             {
                 SetDacChannelDataSource(ChannelGroup.Group4, value, value, value, value, value, value, value,
                                         value);
                 return;
             }
             if (channel == ChannelAddress.Group0Through4Channel0)
             {
                 SetDacChannelDataSource(ChannelAddress.Group0Channel0, value);
                 SetDacChannelDataSource(ChannelAddress.Group1Channel0, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel0, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel0, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel0, value);
                 return;
             }
             if (channel == ChannelAddress.Group0Through4Channel1)
             {
                 SetDacChannelDataSource(ChannelAddress.Group0Channel1, value);
                 SetDacChannelDataSource(ChannelAddress.Group1Channel1, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel1, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel1, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel1, value);
                 return;
             }
             if (channel == ChannelAddress.Group0Through4Channel2)
             {
                 SetDacChannelDataSource(ChannelAddress.Group0Channel2, value);
                 SetDacChannelDataSource(ChannelAddress.Group1Channel2, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel2, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel2, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel2, value);
                 return;
             }
             if (channel == ChannelAddress.Group0Through4Channel3)
             {
                 SetDacChannelDataSource(ChannelAddress.Group0Channel3, value);
                 SetDacChannelDataSource(ChannelAddress.Group1Channel3, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel3, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel3, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel3, value);
                 return;
             }
             if (channel == ChannelAddress.Group0Through4Channel4)
             {
                 SetDacChannelDataSource(ChannelAddress.Group0Channel4, value);
                 SetDacChannelDataSource(ChannelAddress.Group1Channel4, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel4, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel4, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel4, value);
                 return;
             }
             if (channel == ChannelAddress.Group0Through4Channel5)
             {
                 SetDacChannelDataSource(ChannelAddress.Group0Channel5, value);
                 SetDacChannelDataSource(ChannelAddress.Group1Channel5, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel5, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel5, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel5, value);
                 return;
             }
             if (channel == ChannelAddress.Group0Through4Channel6)
             {
                 SetDacChannelDataSource(ChannelAddress.Group0Channel6, value);
                 SetDacChannelDataSource(ChannelAddress.Group1Channel6, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel6, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel6, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel6, value);
                 return;
             }
             if (channel == ChannelAddress.Group0Through4Channel7)
             {
                 SetDacChannelDataSource(ChannelAddress.Group0Channel7, value);
                 SetDacChannelDataSource(ChannelAddress.Group1Channel7, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel7, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel7, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel7, value);
                 return;
             }
             if (channel == ChannelAddress.Group1Through4Channel0)
             {
                 SetDacChannelDataSource(ChannelAddress.Group1Channel0, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel0, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel0, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel0, value);
                 return;
             }
             if (channel == ChannelAddress.Group1Through4Channel1)
             {
                 SetDacChannelDataSource(ChannelAddress.Group1Channel1, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel1, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel1, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel1, value);
                 return;
             }
             if (channel == ChannelAddress.Group1Through4Channel2)
             {
                 SetDacChannelDataSource(ChannelAddress.Group1Channel2, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel2, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel2, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel2, value);
                 return;
             }
             if (channel == ChannelAddress.Group1Through4Channel3)
             {
                 SetDacChannelDataSource(ChannelAddress.Group1Channel3, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel3, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel3, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel3, value);
                 return;
             }
             if (channel == ChannelAddress.Group1Through4Channel4)
             {
                 SetDacChannelDataSource(ChannelAddress.Group1Channel4, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel4, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel4, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel4, value);
                 return;
             }
             if (channel == ChannelAddress.Group1Through4Channel5)
             {
                 SetDacChannelDataSource(ChannelAddress.Group1Channel5, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel5, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel5, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel5, value);
                 return;
             }
             if (channel == ChannelAddress.Group1Through4Channel6)
             {
                 SetDacChannelDataSource(ChannelAddress.Group1Channel6, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel6, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel6, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel6, value);
                 return;
             }
             if (channel == ChannelAddress.Group1Through4Channel7)
             {
                 SetDacChannelDataSource(ChannelAddress.Group1Channel7, value);
                 SetDacChannelDataSource(ChannelAddress.Group2Channel7, value);
                 SetDacChannelDataSource(ChannelAddress.Group3Channel7, value);
                 SetDacChannelDataSource(ChannelAddress.Group4Channel7, value);
                 return;
             }
             throw new ArgumentOutOfRangeException(nameof(channel));
         }
         _setDacChannelDataSourceInternalCommand.SetDacChannelDataSourceInternal(channel, value);
     }
 }
        public void SetDacChannelDataSourceInternal(
            ChannelAddress channelAddress,
            DacChannelDataSource dacChannelDataSource)
        {
            using (_lockFactory.GetLock(LockType.CommandLock))
            {
                if (channelAddress < ChannelAddress.Dac0 || channelAddress > ChannelAddress.Dac39)
                {
                    throw new ArgumentOutOfRangeException(nameof(channelAddress));
                }
                if ((int)dacChannelDataSource < (int)DacChannelDataSource.DataValueA ||
                    (int)dacChannelDataSource > (int)DacChannelDataSource.DataValueB)
                {
                    throw new ArgumentOutOfRangeException(nameof(dacChannelDataSource));
                }

                var channelNum = (byte)((byte)channelAddress - 8);
                var currentSourceSelections = ABSelectRegisterBits.AllChannelsA;
                var specialFunctionCode     = SpecialFunctionCode.NOP;
                if (channelNum < 8)
                {
                    specialFunctionCode     = SpecialFunctionCode.WriteToABSelectRegister0;
                    currentSourceSelections = _readbackABSelectRegisterCommand.ReadbackABSelectRegister(0);
                }
                else if (channelNum >= 8 && channelNum < 16)
                {
                    specialFunctionCode     = SpecialFunctionCode.WriteToABSelectRegister1;
                    currentSourceSelections = _readbackABSelectRegisterCommand.ReadbackABSelectRegister(1);
                }
                else if (channelNum >= 16 && channelNum < 24)
                {
                    specialFunctionCode     = SpecialFunctionCode.WriteToABSelectRegister2;
                    currentSourceSelections = _readbackABSelectRegisterCommand.ReadbackABSelectRegister(2);
                }
                else if (channelNum >= 24 && channelNum < 32)
                {
                    specialFunctionCode     = SpecialFunctionCode.WriteToABSelectRegister3;
                    currentSourceSelections = _readbackABSelectRegisterCommand.ReadbackABSelectRegister(3);
                }
                else if (channelNum >= 32 && channelNum <= 39)
                {
                    specialFunctionCode     = SpecialFunctionCode.WriteToABSelectRegister4;
                    currentSourceSelections = _readbackABSelectRegisterCommand.ReadbackABSelectRegister(4);
                }
                var newSourceSelections = currentSourceSelections;

                var channelOffset = (byte)(channelNum % 8);
                var channelMask   = (ABSelectRegisterBits)(1 << channelOffset);

                if (dacChannelDataSource == DacChannelDataSource.DataValueA)
                {
                    newSourceSelections &= ~channelMask;
                }
                else
                {
                    newSourceSelections |= channelMask;
                }

                if (!_evalBoard.DeviceState.UseRegisterCache ||
                    newSourceSelections != currentSourceSelections
                    )
                {
                    _sendSpecialFunctionCommand.SendSpecialFunction(specialFunctionCode,
                                                                    (byte)newSourceSelections);
                    switch (specialFunctionCode)
                    {
                    case SpecialFunctionCode.WriteToABSelectRegister0:
                        _evalBoard.DeviceState.ABSelectRegisters[0] = newSourceSelections;
                        break;

                    case SpecialFunctionCode.WriteToABSelectRegister1:
                        _evalBoard.DeviceState.ABSelectRegisters[1] = newSourceSelections;
                        break;

                    case SpecialFunctionCode.WriteToABSelectRegister2:
                        _evalBoard.DeviceState.ABSelectRegisters[2] = newSourceSelections;
                        break;

                    case SpecialFunctionCode.WriteToABSelectRegister3:
                        _evalBoard.DeviceState.ABSelectRegisters[3] = newSourceSelections;
                        break;

                    case SpecialFunctionCode.WriteToABSelectRegister4:
                        _evalBoard.DeviceState.ABSelectRegisters[4] = newSourceSelections;
                        break;
                    }
                }
            }
        }