Browse Source

Only look for target disk during Upload (#21804)

ManuelMcLure 3 years ago
parent
commit
6e18af6f81
1 changed files with 85 additions and 82 deletions
  1. 85 82
      Marlin/src/HAL/LPC1768/upload_extra_script.py

+ 85 - 82
Marlin/src/HAL/LPC1768/upload_extra_script.py

@@ -20,101 +20,104 @@ def print_error(e):
 		  'or copy the firmware (.pio/build/%s/firmware.bin) manually to the appropriate disk\n' \
 		  %(e, env.get('PIOENV')))
 
-try:
-	#
-	# Find a disk for upload
-	#
-	upload_disk = 'Disk not found'
-	target_file_found = False
-	target_drive_found = False
-	if current_OS == 'Windows':
+def before_upload(source, target, env):
+	try:
 		#
-		# platformio.ini will accept this for a Windows upload port designation: 'upload_port = L:'
-		#   Windows - doesn't care about the disk's name, only cares about the drive letter
-		import subprocess,string
-		from ctypes import windll
+		# Find a disk for upload
+		#
+		upload_disk = 'Disk not found'
+		target_file_found = False
+		target_drive_found = False
+		if current_OS == 'Windows':
+			#
+			# platformio.ini will accept this for a Windows upload port designation: 'upload_port = L:'
+			#   Windows - doesn't care about the disk's name, only cares about the drive letter
+			import subprocess,string
+			from ctypes import windll
 
-		# getting list of drives
-		# https://stackoverflow.com/questions/827371/is-there-a-way-to-list-all-the-available-drive-letters-in-python
-		drives = []
-		bitmask = windll.kernel32.GetLogicalDrives()
-		for letter in string.ascii_uppercase:
-			if bitmask & 1:
-				drives.append(letter)
-			bitmask >>= 1
+			# getting list of drives
+			# https://stackoverflow.com/questions/827371/is-there-a-way-to-list-all-the-available-drive-letters-in-python
+			drives = []
+			bitmask = windll.kernel32.GetLogicalDrives()
+			for letter in string.ascii_uppercase:
+				if bitmask & 1:
+					drives.append(letter)
+				bitmask >>= 1
 
-		for drive in drives:
-			final_drive_name = drive + ':\\'
-			# print ('disc check: {}'.format(final_drive_name))
-			try:
-				volume_info = str(subprocess.check_output('cmd /C dir ' + final_drive_name, stderr=subprocess.STDOUT))
-			except Exception as e:
-				print ('error:{}'.format(e))
-				continue
-			else:
-				if target_drive in volume_info and not target_file_found:  # set upload if not found target file yet
-					target_drive_found = True
-					upload_disk = final_drive_name
-				if target_filename in volume_info:
-					if not target_file_found:
+			for drive in drives:
+				final_drive_name = drive + ':\\'
+				# print ('disc check: {}'.format(final_drive_name))
+				try:
+					volume_info = str(subprocess.check_output('cmd /C dir ' + final_drive_name, stderr=subprocess.STDOUT))
+				except Exception as e:
+					print ('error:{}'.format(e))
+					continue
+				else:
+					if target_drive in volume_info and not target_file_found:  # set upload if not found target file yet
+						target_drive_found = True
 						upload_disk = final_drive_name
-					target_file_found = True
+					if target_filename in volume_info:
+						if not target_file_found:
+							upload_disk = final_drive_name
+						target_file_found = True
 
-	elif current_OS == 'Linux':
-		#
-		# platformio.ini will accept this for a Linux upload port designation: 'upload_port = /media/media_name/drive'
-		#
-		drives = os.listdir(os.path.join(os.sep, 'media', getpass.getuser()))
-		if target_drive in drives:  # If target drive is found, use it.
-			target_drive_found = True
-			upload_disk = os.path.join(os.sep, 'media', getpass.getuser(), target_drive) + os.sep
-		else:
+		elif current_OS == 'Linux':
+			#
+			# platformio.ini will accept this for a Linux upload port designation: 'upload_port = /media/media_name/drive'
+			#
+			drives = os.listdir(os.path.join(os.sep, 'media', getpass.getuser()))
+			if target_drive in drives:  # If target drive is found, use it.
+				target_drive_found = True
+				upload_disk = os.path.join(os.sep, 'media', getpass.getuser(), target_drive) + os.sep
+			else:
+				for drive in drives:
+					try:
+						files = os.listdir(os.path.join(os.sep, 'media', getpass.getuser(), drive))
+					except:
+						continue
+					else:
+						if target_filename in files:
+							upload_disk = os.path.join(os.sep, 'media', getpass.getuser(), drive) + os.sep
+							target_file_found = True
+							break
+			#
+			# set upload_port to drive if found
+			#
+
+			if target_file_found or target_drive_found:
+				env.Replace(
+					UPLOAD_FLAGS="-P$UPLOAD_PORT"
+				)
+
+		elif current_OS == 'Darwin':  # MAC
+			#
+			# platformio.ini will accept this for a OSX upload port designation: 'upload_port = /media/media_name/drive'
+			#
+			drives = os.listdir('/Volumes')  # human readable names
+			if target_drive in drives and not target_file_found:  # set upload if not found target file yet
+				target_drive_found = True
+				upload_disk = '/Volumes/' + target_drive + '/'
 			for drive in drives:
 				try:
-					files = os.listdir(os.path.join(os.sep, 'media', getpass.getuser(), drive))
+					filenames = os.listdir('/Volumes/' + drive + '/')   # will get an error if the drive is protected
 				except:
 					continue
 				else:
-					if target_filename in files:
-						upload_disk = os.path.join(os.sep, 'media', getpass.getuser(), drive) + os.sep
+					if target_filename in filenames:
+						if not target_file_found:
+							upload_disk = '/Volumes/' + drive + '/'
 						target_file_found = True
-						break
-		#
-		# set upload_port to drive if found
-		#
 
-		if target_file_found or target_drive_found:
-			env.Replace(
-				UPLOAD_FLAGS="-P$UPLOAD_PORT"
-			)
-
-	elif current_OS == 'Darwin':  # MAC
 		#
-		# platformio.ini will accept this for a OSX upload port designation: 'upload_port = /media/media_name/drive'
+		# Set upload_port to drive if found
 		#
-		drives = os.listdir('/Volumes')  # human readable names
-		if target_drive in drives and not target_file_found:  # set upload if not found target file yet
-			target_drive_found = True
-			upload_disk = '/Volumes/' + target_drive + '/'
-		for drive in drives:
-			try:
-				filenames = os.listdir('/Volumes/' + drive + '/')   # will get an error if the drive is protected
-			except:
-				continue
-			else:
-				if target_filename in filenames:
-					if not target_file_found:
-						upload_disk = '/Volumes/' + drive + '/'
-					target_file_found = True
+		if target_file_found or target_drive_found:
+			env.Replace(UPLOAD_PORT=upload_disk)
+			print('\nUpload disk: ', upload_disk, '\n')
+		else:
+			print_error('Autodetect Error')
 
-	#
-	# Set upload_port to drive if found
-	#
-	if target_file_found or target_drive_found:
-		env.Replace(UPLOAD_PORT=upload_disk)
-		print('\nUpload disk: ', upload_disk, '\n')
-	else:
-		print_error('Autodetect Error')
+	except Exception as e:
+		print_error(str(e))
 
-except Exception as e:
-	print_error(str(e))
+env.AddPreAction("upload", before_upload)