Work
This commit is contained in:
		@@ -5,13 +5,10 @@ from adafruit_servokit import ServoKit
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import getch
 | 
					import getch
 | 
				
			||||||
import logging
 | 
					import logging
 | 
				
			||||||
import multiprocessing
 | 
					 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
import pprint
 | 
					import pprint
 | 
				
			||||||
import sys
 | 
					import sys
 | 
				
			||||||
import time
 | 
					import time
 | 
				
			||||||
import threading
 | 
					 | 
				
			||||||
import tty
 | 
					 | 
				
			||||||
import yaml
 | 
					import yaml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -26,6 +23,8 @@ class MikesServoMapper:
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	__ESCAPE_KEY = chr(27)
 | 
						__ESCAPE_KEY = chr(27)
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						__DEFAULT_OUTPUT_FILE_NAME = "servo-mappings.yml"
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	def __init__(self, config_file: str, names):
 | 
						def __init__(self, config_file: str, names):
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		# noinspection PyTypeChecker
 | 
							# noinspection PyTypeChecker
 | 
				
			||||||
@@ -116,6 +115,7 @@ class MikesServoMapper:
 | 
				
			|||||||
			self.__logger.info("1. Create mappings")
 | 
								self.__logger.info("1. Create mappings")
 | 
				
			||||||
			self.__logger.info("2. Test current mappings")
 | 
								self.__logger.info("2. Test current mappings")
 | 
				
			||||||
			self.__logger.info("3. Write mappings to file")
 | 
								self.__logger.info("3. Write mappings to file")
 | 
				
			||||||
 | 
								self.__logger.info("4. Load previously saved mappings")
 | 
				
			||||||
			self.__logger.info("Q. Quit")
 | 
								self.__logger.info("Q. Quit")
 | 
				
			||||||
			user_choice = input("====> ")
 | 
								user_choice = input("====> ")
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
@@ -129,6 +129,8 @@ class MikesServoMapper:
 | 
				
			|||||||
				self.test_mappings()
 | 
									self.test_mappings()
 | 
				
			||||||
			elif user_choice == "3":
 | 
								elif user_choice == "3":
 | 
				
			||||||
				self.write_mappings()
 | 
									self.write_mappings()
 | 
				
			||||||
 | 
								elif user_choice == "4":
 | 
				
			||||||
 | 
									self.load_mappings()
 | 
				
			||||||
			else:
 | 
								else:
 | 
				
			||||||
				self.__logger.warning("Invalid choice: %s" % user_choice)
 | 
									self.__logger.warning("Invalid choice: %s" % user_choice)
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
@@ -248,12 +250,56 @@ class MikesServoMapper:
 | 
				
			|||||||
		# Center
 | 
							# Center
 | 
				
			||||||
		servo.angle = 90
 | 
							servo.angle = 90
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	def write_mappings(self):
 | 
						def make_mappings_output_file_path(self):
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		output_file_path = os.path.join(
 | 
							output_file_path = os.path.join(
 | 
				
			||||||
			"output",
 | 
								"output",
 | 
				
			||||||
			"servo-mappings.yml"
 | 
								self.__DEFAULT_OUTPUT_FILE_NAME
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
							return output_file_path
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						def write_mappings(self):
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							output_file_path = self.make_mappings_output_file_path()
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							data = {
 | 
				
			||||||
 | 
								"servo-mappings": self.__mappings
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							
 | 
				
			||||||
		with open(output_file_path, 'w') as f:
 | 
							with open(output_file_path, 'w') as f:
 | 
				
			||||||
			yaml.dump(self.__mappings, f, default_flow_style=False)
 | 
								yaml.dump(data, f, default_flow_style=False)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						def load_mappings(self, file_path=None):
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if file_path is None:
 | 
				
			||||||
 | 
								file_path = self.make_mappings_output_file_path()
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							self.__logger.info("Attempting to load mappings from: %s" % (file_path,))
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							with open(file_path) as f:
 | 
				
			||||||
 | 
								loaded_data = yaml.safe_load(f)
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							if "servo-mappings" not in loaded_data.keys():
 | 
				
			||||||
 | 
								self.__logger.warning("Could not find key 'servo-mappings' in loaded data")
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							mappings = loaded_data["servo-mappings"]
 | 
				
			||||||
 | 
							if not isinstance(mappings, dict):
 | 
				
			||||||
 | 
								self.__logger.warning("Mappings aren't in dict format; Won't load")
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							for name in mappings.keys():
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								self.__logger.info("Examining mapping: %s" % (name,))
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								channel = mappings[name]
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								if not isinstance(channel, int):
 | 
				
			||||||
 | 
									self.__logger.warning("Mapping isn't an integer; Ignoring: %s" % channel)
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								self.__logger.info("Loading mapping: %s ==> %s" % (name, channel))
 | 
				
			||||||
 | 
								self.set_name_mapping(name=name, channel=channel)
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							self.__logger.info("Done loading mappings")
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								output/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								output/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					*.yml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Reference in New Issue
	
	Block a user