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