 1c0276a0be
			
		
	
	
		1c0276a0be
		
			
		
	
	
	
	
		
			
			* FuriHal: lower MGG display contrast by 4 points * FuriHal: unify external gpio resources initialization * Infrared: parse raw in universal TV file, cleanup it with new ifrared script. Other minor changes. * Gui: fix elements_multiline_text_aligned eating symbols * Lib: human readable errors in flipper application package * Special request from marketing team
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python3
 | |
| 
 | |
| from os import path
 | |
| 
 | |
| from flipper.app import App
 | |
| from flipper.utils.fff import *
 | |
| 
 | |
| 
 | |
| class Main(App):
 | |
|     def init(self):
 | |
|         # Subparsers
 | |
|         self.subparsers = self.parser.add_subparsers(help="sub-command help")
 | |
| 
 | |
|         self.parser_cleanup = self.subparsers.add_parser(
 | |
|             "cleanup", help="Cleanup duplicate remotes"
 | |
|         )
 | |
|         self.parser_cleanup.add_argument("filename", type=str)
 | |
|         self.parser_cleanup.set_defaults(func=self.cleanup)
 | |
| 
 | |
|     def cleanup(self):
 | |
|         f = FlipperFormatFile()
 | |
|         f.load(self.args.filename)
 | |
| 
 | |
|         filetype, version = f.getHeader()
 | |
|         if filetype != "IR library file" or version != 1:
 | |
|             self.logger.error(f"Incorrect file type({filetype}) or version({version})")
 | |
|             return 1
 | |
| 
 | |
|         data = []
 | |
|         unique = {}
 | |
|         while True:
 | |
|             try:
 | |
|                 d = {}
 | |
|                 d["name"] = f.readKey("name")
 | |
|                 d["type"] = f.readKey("type")
 | |
|                 key = None
 | |
|                 if d["type"] == "parsed":
 | |
|                     d["protocol"] = f.readKey("protocol")
 | |
|                     d["address"] = f.readKey("address")
 | |
|                     d["command"] = f.readKey("command")
 | |
|                     key = f'{d["protocol"]}{d["address"]}{d["command"]}'
 | |
|                 elif d["type"] == "raw":
 | |
|                     d["frequency"] = f.readKey("frequency")
 | |
|                     d["duty_cycle"] = f.readKey("duty_cycle")
 | |
|                     d["data"] = f.readKey("data")
 | |
|                     key = f'{d["frequency"]}{d["duty_cycle"]}{d["data"]}'
 | |
|                 else:
 | |
|                     raise Exception(f'Unknown type: {d["type"]}')
 | |
|                 if not key in unique:
 | |
|                     unique[key] = d
 | |
|                     data.append(d)
 | |
|                 else:
 | |
|                     self.logger.warn(f"Duplicate key: {key}")
 | |
|             except EOFError:
 | |
|                 break
 | |
|         # Form new file
 | |
|         f = FlipperFormatFile()
 | |
|         f.setHeader(filetype, version)
 | |
|         for i in data:
 | |
|             f.writeComment(None)
 | |
|             f.writeKey("name", i["name"])
 | |
|             f.writeKey("type", i["type"])
 | |
|             if i["type"] == "parsed":
 | |
|                 f.writeKey("protocol", i["protocol"])
 | |
|                 f.writeKey("address", i["address"])
 | |
|                 f.writeKey("command", i["command"])
 | |
|             elif i["type"] == "raw":
 | |
|                 f.writeKey("frequency", i["frequency"])
 | |
|                 f.writeKey("duty_cycle", i["duty_cycle"])
 | |
|                 f.writeKey("data", i["data"])
 | |
|             else:
 | |
|                 raise Exception(f'Unknown type: {i["type"]}')
 | |
|         f.save(self.args.filename)
 | |
| 
 | |
|         return 0
 | |
| 
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     Main()()
 |