#!/usr/bin/env python # -*- coding: iso-8859-15 -*- #---------------------------------------------------------------------------- # scan.py Modulo para obtener una lista de los puertos series disponibles #---------------------------------------------------------------------------- # Notas: En Linux solo se detectan los puertos del tipo /dev/ttySx # disponibles, que son a los que la libreria pyserial les asigna los # valores 0, 1, 2, etc. Los dispositivos del tipo /dev/ttyUSBx no se # detectan. Para poder usarlos como cualquier otro dispositivo, se # puede hacer un enlace simbolico: # # ln -s /dev/ttyUSB0 /dev/ttyS10 # Asociamos el dispositivo ttyUSB0 a uno del tipo ttyS10. En ese caso si # se detecta correctamente con esta rutina. En este ejemplo devolveria el # valor 10 (si realmente en /dev/ttyUSB0 hay un conversor usb-serie) #---------------------------------------------------------------------------- # # (C)2002 Chris Liechti (cliechti@gmx.net) # (C)2007 Juan Gonzalez # # LICENCIA GPL #---------------------------------------------------------------------------- import sys import serial #----------------------------------------------------------------------------- # Buscar puertos series disposibles. # ENTRADAS: # -num_ports : Numero de puertos a escanear. Por defecto 20 # -verbose : Modo verboso True/False. Si esta activado se va # imprimiendo todo lo que va ocurriendo # DEVUELVE: # Una lista con todos los puertos encontrados. Cada elemento de la lista # es una tupla con el numero del puerto y el del dispositivo #----------------------------------------------------------------------------- def scan(num_ports = 20, verbose=True): #-- Lista de los dispositivos serie. Inicialmente vacia dispositivos_serie = [] if verbose: print "Escanenado %d puertos serie:" % num_ports #-- Escanear num_port posibles puertos serie for i in range(num_ports): if verbose: sys.stdout.write("puerto %d: " % i) sys.stdout.flush() try: #-- Abrir puerto serie s = serial.Serial(i) if verbose: print "OK --> %s" % s.portstr #-- Si no hay errores, anadir el numero y nombre a la lista dispositivos_serie.append( (i, s.portstr)) #-- Cerrar puerto s.close() #-- Si hay un error se ignora except: if verbose: print "NO" pass #-- Devolver la lista de los dispositivos serie encontrados return dispositivos_serie #-------------------------- # Pruebas del modulo Scan #-------------------------- if __name__=='__main__': #-- Escanear los puertos. #-- Se puede indicar el numero de puertos a escaner #-- El modo "verbose" esta activado por defecto. Se desactiva con False puertos_disponibles=scan(num_ports=20,verbose=True) #-- Recorrer la lista mostrando los que se han podido abrir print "" print "Puertos detectados:" if len(puertos_disponibles)!=0: for n,nombre in puertos_disponibles: print " (%d) %s" % (n,nombre) else: print " Ninguno"