using Microsoft.VisualBasic;
using NIDAQmx.DAQmxEnum;
using NIDAQmxConst;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq.Expressions;
using System.Reflection;

namespace NIDAQmx
{
    public class AIChannelFactory:ChannelFactory
    {
        internal AIChannelFactory(DAQmx daqmx):base(daqmx)
        {
        }

        public AIChannel CreateVoltage(string physicalChannel, string nameToAssignToChannel, double minValue, double maxValue, TerminalConfig terminalConfig = TerminalConfig.Default, AIVoltageUnits units = AIVoltageUnits.Volts, string customScaleName = "")
        {
           return Exc<AIChannel>(p =>p.CreateVoltage,physicalChannel, nameToAssignToChannel, minValue, maxValue, terminalConfig, units, customScaleName);
        }
        
        public AIChannel CreateCurrent(string physicalChannel, string nameToAssignToChannel, double min, double max, AnalogCurrentUnit units, AICurrentShuntResistorLoc shuntResistorLoc, double extShuntResistorVal, TerminalConfig terminalConfig = TerminalConfig.Default, string customScaleName = "")
        {
            return Exc<AIChannel>(p => p.CreateCurrent, physicalChannel, nameToAssignToChannel, min, max, units, shuntResistorLoc, extShuntResistorVal, terminalConfig, customScaleName);
        }
        public AIChannel CreateVoltageRMS(string physicalChannel, string nameToAssignToChannel, double min, double max, TerminalConfig terminalConfig = TerminalConfig.Default, AIVoltageUnits units = AIVoltageUnits.Volts, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateVoltageRMS, physicalChannel, nameToAssignToChannel,min,max,terminalConfig, units, customScaleName);
        }
        public AIChannel CreateCurrentRMS(string physicalChannel, string nameToAssignToChannel, double min, double max, AnalogCurrentUnit units, AICurrentShuntResistorLoc shuntResistorLoc, double extShuntResistorVal, TerminalConfig terminalConfig = TerminalConfig.Default, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateCurrentRMS, physicalChannel, nameToAssignToChannel,min, max,units,shuntResistorLoc,extShuntResistorVal,terminalConfig, customScaleName);
        }
        public AIChannel CreateThrmcpl(string physicalChannel, string nameToAssignToChannel, string cjcChannel, double min, double max, AITempUnits units = AITempUnits.DegC, ThrmcplType type = ThrmcplType.N, ThrmcplCJCSrc src = ThrmcplCJCSrc.Chan, double cjcval = 0)
        {
            return Exc<AIChannel>(p=>p.CreateThrmcpl, physicalChannel, nameToAssignToChannel,cjcChannel,min,max,units,type,src,cjcval);
        }
        public AIChannel CreateRTD(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, AITempUnits units, RTDType rtdType, AIResistanceCfg resistanceConfig, AIExcitSrc currentExcitSource, double currentExcitVal, double r0)
        {
            return Exc<AIChannel>(p=>p.CreateRTD, physicalChannel, nameToAssignToChannel,minVal,maxVal,units,rtdType,resistanceConfig,currentExcitSource,currentExcitVal,r0);
        }
        public AIChannel CreateThrmstrIex(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, AITempUnits units, AIResistanceCfg resistanceConfig, AIExcitSrc currentExcitSource, double currentExcitVal, double a, double b, double c)
        {
            return Exc<AIChannel>(p=>p.CreateThrmstrIex, physicalChannel, nameToAssignToChannel, minVal,maxVal,units,resistanceConfig, currentExcitSource,currentExcitVal,a,b,c);
        }
        public AIChannel CreateThrmstrVex(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, AITempUnits units, AIResistanceCfg resistanceConfig, AIExcitSrc currentExcitSource, double currentExcitVal, double a, double b, double c, double r1)
        {
            return Exc<AIChannel>(p=>p.CreateThrmstrVex, physicalChannel, nameToAssignToChannel,minVal, maxVal,units,resistanceConfig,currentExcitSource,currentExcitVal,a, b,c,r1);
        }
        
        public AIChannel CreateStrainGage(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, StrainUnits units, StrainGageCfg strainConfig, AIExcitSrc voltageExcitSource, double voltageExcitVal, double gageFactor, double initialBridgeVoltage, double nominalGageResistance, double poissonRatio, double leadWireResistance, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateStrainGage, physicalChannel, nameToAssignToChannel, minVal, maxVal, units, strainConfig, voltageExcitSource, voltageExcitVal, gageFactor, initialBridgeVoltage, nominalGageResistance, poissonRatio, leadWireResistance, customScaleName);
        }
        public AIChannel CreateRosetteStrainGage(string physicalChannel,
                string nameToAssignToChannel,
                double minVal,
                double maxVal,
                RosetteStrainGageRosetteType rosetteType,
                double gageOrientation,
                RosetteStrainGageRosetteMeasType[] rosetteMeasTypes,
                StrainGageCfg strainConfig,
                int voltageExcitSource,
                double voltageExcitVal,
                double gageFactor,
                double nominalGageResistance,
                double poissonRatio,
                double leadWireResistance)
        {
            return Exc<AIChannel>(p=>p.CreateRosetteStrainGage,physicalChannel, nameToAssignToChannel,minVal,maxVal,rosetteType,gageOrientation, rosetteMeasTypes,strainConfig, voltageExcitSource,voltageExcitVal, gageFactor, nominalGageResistance,poissonRatio, leadWireResistance);
        }
        public AIChannel CreateForceBridgeTwoPointLin(string physicalChannel,
                string nameToAssignToChannel,
                double minVal,
                double maxVal,
                ForceUnits units,
                AIBridgeCfg bridgeConfig,
                int voltageExcitSource,
                double voltageExcitVal,
                double nominalBridgeResistance,
                double firstElectricalVal,
                double secondElectricalVal,
                AIBridgeElectricalUnits electricalUnits,
                double firstPhysicalVal,
                double secondPhysicalVal,
                AIBridgePhysicalUnits physicalUnits,
                string customScaleName = "")
        {
            return Exc<AIChannel>(p => p.CreateForceBridgeTwoPointLin, physicalChannel, nameToAssignToChannel, minVal, maxVal, units, bridgeConfig, voltageExcitSource, voltageExcitVal,nominalBridgeResistance,firstElectricalVal,secondElectricalVal,electricalUnits,firstPhysicalVal,secondPhysicalVal, physicalUnits, customScaleName);
        }
        public AIChannel CreateForceBridgeTable(
                string physicalChannel,
                string nameToAssignToChannel,
                double minVal,
                double maxVal,
                ForceUnits units,
                AIBridgeCfg bridgeConfig,
                int voltageExcitSource,
                double voltageExcitVal,
                double nominalBridgeResistance,
                double[] electricalVals,
                AIBridgeElectricalUnits electricalUnits,
                double[] physicalVals,
                AIBridgePhysicalUnits physicalUnits,
                string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateForceBridgeTable, physicalChannel, nameToAssignToChannel,minVal, maxVal, units, bridgeConfig,voltageExcitSource, voltageExcitVal,nominalBridgeResistance,electricalVals,electricalUnits,physicalVals,physicalUnits, customScaleName);
        }
        public AIChannel CreateForceBridgePolynomial(
                string physicalChannel,
                string nameToAssignToChannel,
                double minVal,
                double maxVal,
                ForceUnits units,
                AIBridgeCfg bridgeConfig,
                int voltageExcitSource,
                double voltageExcitVal,
                double nominalBridgeResistance,
                double[] forwardCoeffs,
                double[] reverseCoeffs,
                AIBridgeElectricalUnits electricalUnits,
                AIBridgePhysicalUnits physicalUnits,
                string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateForceBridgePolynomial, physicalChannel, nameToAssignToChannel, minVal, maxVal, units,bridgeConfig,voltageExcitSource,voltageExcitVal,nominalBridgeResistance,forwardCoeffs,reverseCoeffs,electricalUnits,physicalUnits,customScaleName);
        }

        public AIChannel CreatePressureBridgeTwoPointLin(
                string physicalChannel,
                string nameToAssignToChannel,
                double minVal,
                double maxVal,
                AIPressureUnits units,
                AIBridgeCfg bridgeConfig,
                int voltageExcitSource,
                double voltageExcitVal,
                double nominalBridgeResistance,
                double firstElectricalVal,
                double secondElectricalVal,
                AIBridgeElectricalUnits electricalUnits,
                double firstPhysicalVal,
                double secondPhysicalVal,
                AIBridgePhysicalUnits physicalUnits,
                string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreatePressureBridgeTwoPointLin, physicalChannel, nameToAssignToChannel,minVal,maxVal, units, bridgeConfig,voltageExcitSource, voltageExcitVal,nominalBridgeResistance,firstElectricalVal,secondElectricalVal,electricalUnits,firstPhysicalVal,secondPhysicalVal,physicalUnits, customScaleName);
        }
        public AIChannel CreatePressureBridgeTable(
                string physicalChannel,
                string nameToAssignToChannel,
                double minVal,
                double maxVal,
                AIPressureUnits units,
                AIBridgeCfg bridgeConfig,
                int voltageExcitSource,
                double voltageExcitVal,
                double nominalBridgeResistance,
                double[] electricalVals,
                AIBridgeElectricalUnits electricalUnits,
                double[] physicalVals,
                AIBridgePhysicalUnits physicalUnits,
                string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreatePressureBridgeTable, physicalChannel, nameToAssignToChannel, minVal, maxVal, units,bridgeConfig,voltageExcitSource,voltageExcitVal,nominalBridgeResistance,electricalVals,electricalUnits,physicalVals,physicalUnits, customScaleName);
        }
        public AIChannel CreatePressureBridgePolynomial(
                string physicalChannel,
                string nameToAssignToChannel,
                double minVal,
                double maxVal,
                AIPressureUnits units,
                AIBridgeCfg bridgeConfig,
                int voltageExcitSource,
                double voltageExcitVal,
                double nominalBridgeResistance,
                double[] forwardCoeffs,
                double[] reverseCoeffs,
                AIBridgeElectricalUnits electricalUnits,
                AIBridgePhysicalUnits physicalUnits,
                string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreatePressureBridgePolynomial, physicalChannel, nameToAssignToChannel,minVal,maxVal, units, bridgeConfig,voltageExcitSource, voltageExcitVal,nominalBridgeResistance,forwardCoeffs,reverseCoeffs,electricalUnits,physicalUnits,customScaleName);
        }
        public AIChannel CreateTorqueBridgeTwoPointLin(
                string physicalChannel,
                string nameToAssignToChannel,
                double minVal,
                double maxVal,
                AITorqueUnits units,
                AIBridgeCfg bridgeConfig,
                int voltageExcitSource,
                double voltageExcitVal,
                double nominalBridgeResistance,
                double firstElectricalVal,
                double secondElectricalVal,
                AIBridgeElectricalUnits electricalUnits,
                double firstPhysicalVal,
                double secondPhysicalVal,
                AIBridgePhysicalUnits physicalUnits,
                string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateTorqueBridgeTwoPointLin, physicalChannel, nameToAssignToChannel, minVal, maxVal, units,bridgeConfig,voltageExcitSource,voltageExcitVal,nominalBridgeResistance,firstElectricalVal,secondElectricalVal,electricalUnits,electricalUnits,firstPhysicalVal,secondPhysicalVal,physicalUnits, customScaleName);
        }
        public AIChannel CreateTorqueBridgeTable(
                string physicalChannel,
                string nameToAssignToChannel,
                double minVal,
                double maxVal,
                AITorqueUnits units,
                AIBridgeCfg bridgeConfig,
                int voltageExcitSource,
                double voltageExcitVal,
                double nominalBridgeResistance,
                double[] electricalVals,
                AIBridgeElectricalUnits electricalUnits,
                double[] physicalVals,
                AIBridgePhysicalUnits physicalUnits,
                string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateTorqueBridgeTable, physicalChannel, nameToAssignToChannel,minVal, maxVal, units,bridgeConfig, voltageExcitSource,voltageExcitVal, nominalBridgeResistance, electricalVals,electricalUnits, physicalVals, physicalUnits, customScaleName);
        }
        public AIChannel CreateTorqueBridgePolynomial(
                string physicalChannel,
                string nameToAssignToChannel,
                double minVal,
                double maxVal,
                AITorqueUnits units,
                AIBridgeCfg bridgeConfig,
                AIExcitSrc voltageExcitSource,
                double voltageExcitVal,
                double nominalBridgeResistance,
                double[] forwardCoeffs,
                double[] reverseCoeffs,
                AIBridgeElectricalUnits electricalUnits,
                AIBridgePhysicalUnits physicalUnits,
                string customScaleName = "")
        {
            return Exc<AIChannel>(p => p.CreateTorqueBridgePolynomial, physicalChannel, nameToAssignToChannel, minVal, maxVal, units, bridgeConfig, voltageExcitSource, voltageExcitVal, nominalBridgeResistance, forwardCoeffs, reverseCoeffs, electricalUnits, physicalUnits, customScaleName);
        }
        public AIChannel CreateBridge(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, AIBridgeUnits units, AIBridgeCfg bridgeConfig, AIExcitSrc voltageExcitSource, double voltageExcitVal, double nominalBridgeResistance, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateBridge, physicalChannel, nameToAssignToChannel,minVal, maxVal, units, bridgeConfig,voltageExcitSource, voltageExcitVal,nominalBridgeResistance, customScaleName);
        }
        public AIChannel CreateVoltageWithExcit(string physicalChannel, string nameToAssignToChannel, TerminalConfig terminalConfig, double minVal, double maxVal, AIVoltageUnits units, AIBridgeCfg bridgeConfig, AIExcitSrc voltageExcitSource, double voltageExcitVal, bool useExcitForScaling, string customScaleName = "")
        {
            return Exc<AIChannel>(p => p.CreateVoltageWithExcit, physicalChannel, nameToAssignToChannel, terminalConfig, minVal, maxVal, units, bridgeConfig, voltageExcitSource, voltageExcitVal, useExcitForScaling, customScaleName);
        }
        public AIChannel CreateTempBuiltInSensor(string physicalChannel, string nameToAssignToChannel, AITempUnits units)
        {
            return Exc<AIChannel>(p => p.CreateTempBuiltInSensor, physicalChannel, nameToAssignToChannel, units);
        }
        public AIChannel CreateAccel(string physicalChannel, string nameToAssignToChannel, TerminalConfig terminalConfig, double minVal, double maxVal, AccelUnits units, double sensitivity, AccelSensitivityUnits sensitivityUnits, AIExcitSrc currentExcitSource, double currentExcitVal, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateAccel, physicalChannel, nameToAssignToChannel,terminalConfig, minVal, maxVal, units, sensitivity, sensitivityUnits, currentExcitSource, currentExcitVal, customScaleName);
        }
        public AIChannel CreateVelocityIEPE(string physicalChannel, string nameToAssignToChannel, TerminalConfig terminalConfig, double minVal, double maxVal, VelocityUnits units, double sensitivity, VelocityIEPESensorSensitivityUnits sensitivityUnits, AIExcitSrc currentExcitSource, double currentExcitVal, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateVelocityIEPE, physicalChannel, nameToAssignToChannel, terminalConfig, minVal, maxVal,units, sensitivity, sensitivityUnits,currentExcitSource, currentExcitVal,customScaleName);
        }
        public AIChannel CreateForceIEPE(string physicalChannel, string nameToAssignToChannel, TerminalConfig terminalConfig, double minVal, double maxVal, ForceUnits units, double sensitivity, ForceIEPESensorSensitivityUnits sensitivityUnits, AIExcitSrc currentExcitSource, double currentExcitVal, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateForceIEPE, physicalChannel, nameToAssignToChannel,terminalConfig, minVal, maxVal, units, sensitivity, sensitivityUnits, currentExcitSource, currentExcitVal, customScaleName);
        }
        public AIChannel CreateMicrophone(string physicalChannel, string nameToAssignToChannel, TerminalConfig terminalConfig, SoundPressureUnits units, double micSensitivity, double maxSndPressLevel, AIExcitSrc currentExcitSource, double currentExcitVal, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateMicrophone, physicalChannel, nameToAssignToChannel,terminalConfig,units, micSensitivity, maxSndPressLevel, currentExcitSource, currentExcitVal,customScaleName);
        }
        public AIChannel CreateCharge(string physicalChannel, string nameToAssignToChannel, TerminalConfig terminalConfig, double minVal, double maxVal, AIChargeUnits units, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateCharge, physicalChannel,nameToAssignToChannel,terminalConfig,minVal,maxVal, units, customScaleName);
        }
        public AIChannel CreateAccelCharge(string physicalChannel, string nameToAssignToChannel, TerminalConfig terminalConfig, double minVal, double maxVal, AccelUnits units, double sensitivity, AccelChargeSensitivityUnits sensitivityUnits, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateAccelCharge, physicalChannel,nameToAssignToChannel, terminalConfig,minVal,maxVal,units,sensitivity,sensitivityUnits, customScaleName);
        }
        public AIChannel CreateAccel4WireDCVoltage(string physicalChannel, string nameToAssignToChannel, TerminalConfig terminalConfig, double minVal, double maxVal, AccelUnits units, double sensitivity, AccelSensitivityUnits sensitivityUnits, AIExcitSrc voltageExcitSource, double voltageExcitVal, bool useExcitForScaling, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateAccel4WireDCVoltage, physicalChannel,nameToAssignToChannel,terminalConfig, minVal,maxVal,units,sensitivity,sensitivityUnits,voltageExcitSource,voltageExcitVal,useExcitForScaling, customScaleName);
        }
        public AIChannel CreatePosLVDT(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, LVDTUnits units, double sensitivity, LVDTSensitivityUnits sensitivityUnits, AIExcitSrc voltageExcitSource, double voltageExcitVal, double voltageExcitFreq, ACExcitWireMode ACExcitWireMode, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreatePosLVDT, physicalChannel,nameToAssignToChannel,minVal,maxVal,units,sensitivity,sensitivityUnits, voltageExcitSource,voltageExcitVal,voltageExcitFreq,ACExcitWireMode,customScaleName);
        }
        public AIChannel CreatePosRVDT(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, RVDTUnits units, double sensitivity, RVDTSensitivityUnits sensitivityUnits, AIExcitSrc voltageExcitSource, double voltageExcitVal, double voltageExcitFreq, ACExcitWireMode ACExcitWireMode, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreatePosRVDT, physicalChannel,nameToAssignToChannel,minVal,maxVal,units,sensitivity,sensitivityUnits,voltageExcitSource,voltageExcitVal, voltageExcitFreq,ACExcitWireMode, customScaleName);
        }
        public AIChannel CreatePosEddyCurrProxProbe(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, LVDTUnits units, double sensitivity, EddyCurrentProxSensitivityUnits sensitivityUnits, string customScaleName = "")
        {
            return Exc<AIChannel>(p => p.CreatePosEddyCurrProxProbe, physicalChannel, nameToAssignToChannel,minVal, maxVal, units, sensitivity, sensitivityUnits, customScaleName);
        }
        public AIChannel CreateDeviceTemp(string physicalChannel, string nameToAssignToChannel, AITempUnits units)
        {
            return Exc<AIChannel>(p=>p.CreateDeviceTemp, physicalChannel, nameToAssignToChannel, units);
        }
        public AIChannel CreateTEDSVoltage(string physicalChannel, string nameToAssignToChannel, TerminalConfig terminalConfig, double minVal, double maxVal, AIVoltageUnits units, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateTEDSVoltage, physicalChannel, nameToAssignToChannel, terminalConfig, minVal, maxVal,units, customScaleName);
        }
        public AIChannel CreateTEDSCurrent(string physicalChannel, string nameToAssignToChannel, double min, double max, AnalogCurrentUnit units, AICurrentShuntResistorLoc shuntResistorLoc, double extShuntResistorVal, TerminalConfig terminalConfig = TerminalConfig.Default, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateTEDSCurrent, physicalChannel, nameToAssignToChannel,min,max,units,shuntResistorLoc,extShuntResistorVal,terminalConfig, customScaleName);
        }
        public AIChannel CreateTEDSThrmcpl(string physicalChannel, string nameToAssignToChannel, string cjcChannel, double min, double max, AITempUnits units = AITempUnits.DegC, ThrmcplCJCSrc src = ThrmcplCJCSrc.Chan, double cjcval = 0)
        {
            return Exc<AIChannel>(p=>p.CreateTEDSThrmcpl, physicalChannel, nameToAssignToChannel,cjcChannel,min,max,units,src,cjcval);
        }
        public AIChannel CreateTEDSRTD(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, AITempUnits units, AIResistanceCfg resistanceConfig, AIExcitSrc currentExcitSource, double currentExcitVal)
        {
            return Exc<AIChannel>(p=>p.CreateTEDSRTD, physicalChannel, nameToAssignToChannel,minVal,maxVal,units,resistanceConfig,currentExcitSource,currentExcitVal);
        }
        public AIChannel CreateTEDSThrmstrIex(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, AITempUnits units, AIResistanceCfg resistanceConfig, AIExcitSrc currentExcitSource, double currentExcitVal)
        {
            return Exc<AIChannel>(p=>p.CreateTEDSThrmstrIex, physicalChannel, nameToAssignToChannel, minVal,maxVal,units,resistanceConfig, currentExcitSource,currentExcitVal);
        }
        public AIChannel CreateTEDSThrmstrVex(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, AITempUnits units, AIResistanceCfg resistanceConfig, AIExcitSrc currentExcitSource, double currentExcitVal, double r1)
        {
            return Exc<AIChannel>(p=>p.CreateTEDSThrmstrVex, physicalChannel, nameToAssignToChannel,minVal, maxVal,units,resistanceConfig,currentExcitSource, currentExcitVal,r1);
        }
        public AIChannel CreateFreqVoltage(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, AIFreqUnits units, double thresholdLevel, double hysteresis, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateFreqVoltage, physicalChannel, nameToAssignToChannel,minVal,maxVal,units,thresholdLevel,hysteresis,customScaleName);
        }
        public AIChannel CreateResistance(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, ResistanceUnits units, AIResistanceCfg resistanceConfig, AIExcitSrc currentExcitSource, double currentExcitVal, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateResistance, physicalChannel,nameToAssignToChannel,minVal,maxVal, units,resistanceConfig, currentExcitSource, currentExcitVal,customScaleName);
        }
        public AIChannel CreateTEDSResistance(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, ResistanceUnits units, AIResistanceCfg resistanceConfig, AIExcitSrc currentExcitSource, double currentExcitVal, string customScaleName = "")
        {
            return Exc<AIChannel>(p => p.CreateTEDSResistance, physicalChannel, nameToAssignToChannel, minVal, maxVal, units, resistanceConfig, currentExcitSource, currentExcitVal, customScaleName);
        }
        public AIChannel CreateTEDSStrainGage(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, StrainUnits units, AIExcitSrc voltageExcitSource, double voltageExcitVal, double initialBridgeVoltage, double leadWireResistance, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateTEDSStrainGage, physicalChannel, nameToAssignToChannel,minVal, maxVal, units, voltageExcitSource, voltageExcitVal, initialBridgeVoltage, leadWireResistance, customScaleName);
        }
        public AIChannel CreateTEDSForceBridge(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, ForceUnits units, AIExcitSrc voltageExcitSource, double voltageExcitVal, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateTEDSForceBridge, physicalChannel, nameToAssignToChannel,minVal,maxVal, units, voltageExcitSource,voltageExcitVal,customScaleName);
        }
        public AIChannel CreateTEDSPressureBridge(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, AIPressureUnits units, AIExcitSrc voltageExcitSource, double voltageExcitVal, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateTEDSPressureBridge, physicalChannel, nameToAssignToChannel, minVal,maxVal, units,voltageExcitSource,voltageExcitVal, customScaleName);
        }
        public AIChannel CreateTEDSTorqueBridge(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, AITorqueUnits units, AIExcitSrc voltageExcitSource, double voltageExcitVal, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateTEDSTorqueBridge, physicalChannel, nameToAssignToChannel,minVal, maxVal, units,voltageExcitSource, voltageExcitVal, customScaleName);
        }
        public AIChannel CreateTEDSBridge(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, AIBridgeUnits units, AIExcitSrc voltageExcitSource, double voltageExcitVal, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateTEDSBridge, physicalChannel, nameToAssignToChannel,minVal,maxVal,units,voltageExcitSource,voltageExcitVal,customScaleName);
        }
        public AIChannel CreateTEDSAccel(string physicalChannel, string nameToAssignToChannel, TerminalConfig terminalConfig, double minVal, double maxVal, AccelUnits units, AIExcitSrc currentExcitSource, double currentExcitVal, string customScaleName = "")
        {
            return Exc<AIChannel>(p => p.CreateTEDSAccel, physicalChannel, nameToAssignToChannel, terminalConfig, minVal, maxVal, units, currentExcitSource, currentExcitVal, customScaleName);
        }
        public AIChannel CreateTEDSForceIEPE(string physicalChannel, string nameToAssignToChannel, TerminalConfig terminalConfig, double minVal, double maxVal, ForceUnits units, AIExcitSrc currentExcitSource, double currentExcitVal, string customScaleName = "")
        {
            return Exc<AIChannel>(p=>p.CreateForceIEPE, physicalChannel, nameToAssignToChannel,terminalConfig, minVal, maxVal,units,currentExcitSource,currentExcitVal,customScaleName);
        }
        public AIChannel CreateTEDSMicrophone(string physicalChannel, string nameToAssignToChannel, TerminalConfig terminalConfig, SoundPressureUnits units, double maxSndPressLevel, AIExcitSrc currentExcitSource, double currentExcitVal, string customScaleName = "")
        {
            return Exc<AIChannel>(p => p.CreateTEDSMicrophone, physicalChannel, nameToAssignToChannel, terminalConfig, units, maxSndPressLevel, currentExcitSource, currentExcitVal, customScaleName);
        }
        public AIChannel CreateTEDSPosLVDT(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, LVDTUnits units, AIExcitSrc voltageExcitSource, double voltageExcitVal, double voltageExcitFreq, ACExcitWireMode ACExcitWireMode, string customScaleName = "")
        {
            return Exc<AIChannel>(p => p.CreateTEDSPosLVDT, physicalChannel, nameToAssignToChannel, minVal, maxVal, units, voltageExcitSource, voltageExcitVal, voltageExcitFreq, ACExcitWireMode, customScaleName);
        }
        public AIChannel CreateTEDSAIPosRVDT(string physicalChannel, string nameToAssignToChannel, double minVal, double maxVal, RVDTUnits units, AIExcitSrc voltageExcitSource, double voltageExcitVal, double voltageExcitFreq, ACExcitWireMode ACExcitWireMode, string customScaleName = "")
        {
            return Exc<AIChannel>(p => p.CreateTEDSAIPosRVDT, physicalChannel, nameToAssignToChannel, minVal, maxVal, units, voltageExcitSource, voltageExcitVal, voltageExcitFreq, ACExcitWireMode, customScaleName);
        }
        
    }
}
