kopia lustrzana https://github.com/evil-mad/EggBot
				
				
				
			Add a Linux-specific serial port scanner that can detect EiBotBoards.
git-svn-id: https://eggbotcode.googlecode.com/svn/trunk@105 72233254-1b6c-9e9c-5072-401df62706fbpull/47/head
							rodzic
							
								
									653adb9e3e
								
							
						
					
					
						commit
						6bf570e48f
					
				| 
						 | 
				
			
			@ -6,5 +6,7 @@ if platform == 'win32':
 | 
			
		|||
	from eggbot_scanwin32 import *
 | 
			
		||||
elif platform == 'darwin':
 | 
			
		||||
	from eggbot_scanosx import *
 | 
			
		||||
elif platform == 'linux2':
 | 
			
		||||
	from eggbot_scanlinux import *
 | 
			
		||||
else:
 | 
			
		||||
	from eggbot_scanposix import *
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
import os
 | 
			
		||||
 | 
			
		||||
DEV_TREE = '/dev'
 | 
			
		||||
USB_DEVICE_TREE = '/sys/bus/usb/devices'
 | 
			
		||||
 | 
			
		||||
def findEiBotBoards():
 | 
			
		||||
	"""Find only those USB devices that declare themselves to be EiBotBoards"""
 | 
			
		||||
 | 
			
		||||
	# find all USB devices whose product name is 'EiBotBoard'
 | 
			
		||||
	with os.popen( 'fgrep -l EiBotBoard %s/*/product' % USB_DEVICE_TREE ) as pipe:
 | 
			
		||||
		for path in [ os.path.split( path )[0] for path in pipe.readlines()]:
 | 
			
		||||
			device = os.path.split( path )[1]
 | 
			
		||||
 | 
			
		||||
			# for each device endpoint ...
 | 
			
		||||
			for dir in os.listdir( path ):
 | 
			
		||||
				if dir.startswith( device ):
 | 
			
		||||
 | 
			
		||||
					# find the endpoint that supports tty access
 | 
			
		||||
					ttydir = os.path.join( USB_DEVICE_TREE, device, dir, 'tty' )
 | 
			
		||||
					if os.path.exists( ttydir ):
 | 
			
		||||
 | 
			
		||||
						# And emit each (the) interface name
 | 
			
		||||
						for ttyname in os.listdir( ttydir ):
 | 
			
		||||
							yield os.path.join( DEV_TREE, ttyname )
 | 
			
		||||
 | 
			
		||||
def findPorts():
 | 
			
		||||
	for device in os.listdir( DEV_TREE ):
 | 
			
		||||
		if not device.startswith( 'ttyACM' ):
 | 
			
		||||
			continue
 | 
			
		||||
		yield os.path.join( DEV_TREE , device )
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
	print "Looking for EiBotBoards"
 | 
			
		||||
	for port in findEiBotBoards():
 | 
			
		||||
		print "  ", port
 | 
			
		||||
 | 
			
		||||
	print "Looking for COM ports"
 | 
			
		||||
	for port in findPorts():
 | 
			
		||||
		print "  ", port
 | 
			
		||||
| 
						 | 
				
			
			@ -4,8 +4,7 @@ def findEiBotBoards():
 | 
			
		|||
	usbdata = os.popen( '/usr/sbin/system_profiler SPUSBDataType' ).read()
 | 
			
		||||
	tokens = re.split( 'EiBotBoard', usbdata )
 | 
			
		||||
	for t in tokens[1:]:
 | 
			
		||||
		match = re.match( '.*?Location ID: 0x([0-9a-fA-F]+).*', t,
 | 
			
		||||
				  re.M | re.S )
 | 
			
		||||
		match = re.match( '.*?Location ID: 0x([0-9a-fA-F]+).*', t, re.M | re.S )
 | 
			
		||||
		if match != None:
 | 
			
		||||
			locid = int( match.group( 1 ), 16 )
 | 
			
		||||
			yield '/dev/cu.usbmodem%x' % ( ( locid >> 16 ) + 1 )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue