| 
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -7,6 +7,7 @@ import types
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import tarfile
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import lzma
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import ctypes
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import re
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				sys.path.append(os.path.dirname(os.path.abspath(__file__)))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				import gateway
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -233,10 +234,20 @@ class XqFlash():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if data[:4] == b'HDR2':
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            die(f'HDR2 stock image not supported!')
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        hdr_model_id = int.from_bytes(data[14:16], byteorder='little')
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        model_id = xqmodel.get_modelid_by_name(gw.device_name)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        if model_id > 0:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if hdr_model_id != model_id:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                die(f'Loaded stock firmware not compatible with "{gw.device_name}" !!!')
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        while True:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            model_id = xqmodel.get_modelid_by_name(gw.device_name)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if model_id > 0:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                if model_id == hdr_model_id:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    break
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if gw.device_name in xqmodel.xqModelList:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                sim_model = xqmodel.xqModelList[gw.device_name]['similar']
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                if sim_model:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    sim_model_id = xqmodel.get_modelid_by_name(sim_model)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    if sim_model_id > 0:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                        if sim_model_id == hdr_model_id:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                            break
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            die(f'Loaded stock firmware not compatible with "{gw.device_name}" !!!')
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            break
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        imglst = [ ]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        for i in range(8):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            p = 0x10 + i * 4
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -270,6 +281,12 @@ class XqFlash():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.img_stock_names = { }
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        for i, img in enumerate(imglst):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            #print(img.data[:4], '   0x%x' % len(img.data))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if img.name == 'xiaoqiang_version':
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                txt = img.data.decode('latin_1')
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                x = re.search(r"option HARDWARE '(.*?)'", txt)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                if x:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    self.img_stock_model = x.group(1)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    print(f'Parse HDR image for "{self.img_stock_model}" router')
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if len(img.data) < 1*1024*1024:  # skip uboot and other files
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                continue
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            hr = self.parse_image(img.data, img.name)
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |