from chiplotle.tools.plottertools._instantiate_plotter import _instantiate_plotter
from chiplotle.tools.serialtools import sniff_ports_for_plotters
from chiplotle.tools.serialtools import scan_serial_ports
#from chiplotle.tools.serialtools import instantiate_serial_from_config_file

def search_and_instantiate_plotters( ):
   '''Dynamically searches and instantiates all found plotters.
   The function sniffs all serial ports in search for pen plotters and
   instantiates all plotters found. If a plotter is not recognized,
   the function interactively queries user for plotter type.'''

   from chiplotle.tools.plottertools import instantiate_plotter_from_id
   from chiplotle.tools.plottertools import interactive_choose_plotter

   print 'Scanning serial ports...'
   ports = scan_serial_ports( ).values( )
   print 'Found ports:' 
   print '  ' + '\n  '.join(ports)
   
   ## get serial ports that have a plotter connected...
   print '\nSniffing for plotters in all serial ports...'
   plotters_found = sniff_ports_for_plotters(ports)
   if len(plotters_found) == 0:
      print 'Found no plotter connected to any of the serial ports.'
      print 'Is your plotter on?\n'
      ## return a list so we don't get a python error when trying 
      ## to index the result.
      return [None]
   else:
      for serial_address, pln in plotters_found.items( ):
         print '   Found plotter %s in port %s' % (pln, serial_address)
   ## instantiate a plotter for every port with a plotter... 
   result = [ ]
   for serial_address, pln in plotters_found.items( ): 
      plotter = _instantiate_plotter(serial_address, pln)
      result.append(plotter)
   return result 
