text: # coding= latin-1
  """ Acquisition of multiple channel
  
  This is a example of using classes. This example is obsolete as it does not use the Task object
  
  """
  
  import numpy
  
  from PyDAQmx.DAQmxFunctions import *
  from PyDAQmx.DAQmxConstants import *
  from PyDAQmx import TaskHandle, int32
  from ctypes import byref
  
  class MultiChannelAnalogInput():
      """Class to create a multi-channel analog input
      
      Usage: AI = MultiChannelInput(physicalChannel)
          physicalChannel: a string or a list of strings
      optional parameter: limit: tuple or list of tuples, the AI limit values
                          reset: Boolean
      Methods:
          read(name), return the value of the input name
          readAll(), return a dictionary name:value
      """
      def __init__(self,physicalChannel, limit = None, reset = False):
          if type(physicalChannel) == type(""):
              self.physicalChannel = [physicalChannel]
          else:
              self.physicalChannel  =physicalChannel
          self.numberOfChannel = physicalChannel.__len__()
          if limit is None:
              self.limit = dict([(name, (-10.0,10.0)) for name in self.physicalChannel])
          elif type(limit) == tuple:
              self.limit = dict([(name, limit) for name in self.physicalChannel])
          else:
              self.limit = dict([(name, limit[i]) for  i,name in enumerate(self.physicalChannel)])           
          if reset:
              DAQmxResetDevice(physicalChannel[0].split('/')[0] )
      def configure(self):
          # Create one task handle per Channel
          taskHandles = dict([(name,TaskHandle(0)) for name in self.physicalChannel])
          for name in self.physicalChannel:
              DAQmxCreateTask("",byref(taskHandles[name]))
              DAQmxCreateAIVoltageChan(taskHandles[name],name,"",DAQmx_Val_RSE,
                                       self.limit[name][0],self.limit[name][1],
                                       DAQmx_Val_Volts,None)
          self.taskHandles = taskHandles
      def readAll(self):
          return dict([(name,self.read(name)) for name in self.physicalChannel])
      def read(self,name = None):
          if name is None:
              name = self.physicalChannel[0]
          taskHandle = self.taskHandles[name]                    
          DAQmxStartTask(taskHandle)
          data = numpy.zeros((1,), dtype=numpy.float64)
  #        data = AI_data_type()
          read = int32()
          DAQmxReadAnalogF64(taskHandle,1,10.0,DAQmx_Val_GroupByChannel,data,1,byref(read),None)
          DAQmxStopTask(taskHandle)
          return data[0]
  
  
  if __name__ == '__main__':
      multipleAI = MultiChannelAnalogInput(["Dev1/ai2","Dev1/ai1"])
      multipleAI.configure()
  