13af6ab5fSopenharmony_ci#!/usr/bin/env python3 23af6ab5fSopenharmony_ci# coding: utf-8 33af6ab5fSopenharmony_ci 43af6ab5fSopenharmony_ci""" 53af6ab5fSopenharmony_ciCopyright (c) 2024 Huawei Device Co., Ltd. 63af6ab5fSopenharmony_ciLicensed under the Apache License, Version 2.0 (the "License"); 73af6ab5fSopenharmony_ciyou may not use this file except in compliance with the License. 83af6ab5fSopenharmony_ciYou may obtain a copy of the License at 93af6ab5fSopenharmony_ci 103af6ab5fSopenharmony_ci http://www.apache.org/licenses/LICENSE-2.0 113af6ab5fSopenharmony_ci 123af6ab5fSopenharmony_ciUnless required by applicable law or agreed to in awriting, software 133af6ab5fSopenharmony_cidistributed under the License is distributed on an "AS IS" BASIS, 143af6ab5fSopenharmony_ciWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 153af6ab5fSopenharmony_ciSee the License for the specific language governing permissions and 163af6ab5fSopenharmony_cilimitations under the License. 173af6ab5fSopenharmony_ci""" 183af6ab5fSopenharmony_ci 193af6ab5fSopenharmony_ciimport os 203af6ab5fSopenharmony_ciimport stat 213af6ab5fSopenharmony_ciimport subprocess 223af6ab5fSopenharmony_ciimport time 233af6ab5fSopenharmony_ciimport zipfile 243af6ab5fSopenharmony_ci 253af6ab5fSopenharmony_ciimport requests 263af6ab5fSopenharmony_ciimport yaml 273af6ab5fSopenharmony_cifrom pywinauto import Application 283af6ab5fSopenharmony_cifrom tqdm import tqdm 293af6ab5fSopenharmony_ci 303af6ab5fSopenharmony_ci 313af6ab5fSopenharmony_cidef job(cmd): 323af6ab5fSopenharmony_ci subprocess.run(cmd, shell=False) 333af6ab5fSopenharmony_ci 343af6ab5fSopenharmony_ci 353af6ab5fSopenharmony_cidef get_tool(): 363af6ab5fSopenharmony_ci config_file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../config.yaml') 373af6ab5fSopenharmony_ci with open(config_file_path, 'r') as config_file: 383af6ab5fSopenharmony_ci data = yaml.safe_load(config_file.read()) 393af6ab5fSopenharmony_ci url = data['url_tools'] 403af6ab5fSopenharmony_ci print(f"Getting RKDevTool from {url}") 413af6ab5fSopenharmony_ci r = requests.get(url, stream=True) 423af6ab5fSopenharmony_ci total = int(r.headers.get('content-length'), 0) 433af6ab5fSopenharmony_ci flags = os.O_WRONLY | os.O_CREAT 443af6ab5fSopenharmony_ci modes = stat.S_IWUSR | stat.S_IRUSR 453af6ab5fSopenharmony_ci 463af6ab5fSopenharmony_ci with os.fdopen(os.open(r".\RKDevTool.zip", flags, modes), "wb") as f, tqdm( 473af6ab5fSopenharmony_ci desc="RKDevTool.zip", 483af6ab5fSopenharmony_ci total=total, 493af6ab5fSopenharmony_ci unit='iB', 503af6ab5fSopenharmony_ci unit_scale=True, 513af6ab5fSopenharmony_ci unit_divisor=1024, 523af6ab5fSopenharmony_ci ) as bar: 533af6ab5fSopenharmony_ci for byte in r.iter_content(chunk_size=1024): 543af6ab5fSopenharmony_ci size = f.write(byte) 553af6ab5fSopenharmony_ci bar.update(size) 563af6ab5fSopenharmony_ci with zipfile.ZipFile(".\\RKDevTool.zip", 'r') as zfile: 573af6ab5fSopenharmony_ci zfile.extractall(path=".\\RKDevTool") 583af6ab5fSopenharmony_ci 593af6ab5fSopenharmony_ci os.remove('./RKDevtool.zip') 603af6ab5fSopenharmony_ci 613af6ab5fSopenharmony_ci 623af6ab5fSopenharmony_cidef end_burn(dlg): 633af6ab5fSopenharmony_ci timeout = 300 643af6ab5fSopenharmony_ci while True: 653af6ab5fSopenharmony_ci if timeout < 0: 663af6ab5fSopenharmony_ci return 673af6ab5fSopenharmony_ci mode = dlg.window(control_type="Tab").window_text() 683af6ab5fSopenharmony_ci if mode == 'Found One MASKROM Device': 693af6ab5fSopenharmony_ci dlg.Button16.click() 703af6ab5fSopenharmony_ci print("image burnning finished") 713af6ab5fSopenharmony_ci return 723af6ab5fSopenharmony_ci else: 733af6ab5fSopenharmony_ci print("please wait for a while...") 743af6ab5fSopenharmony_ci time.sleep(5) 753af6ab5fSopenharmony_ci timeout -= 5 763af6ab5fSopenharmony_ci 773af6ab5fSopenharmony_ci 783af6ab5fSopenharmony_cidef auto_burn(): 793af6ab5fSopenharmony_ci rk_tool_exe_path = os.path.join(os.path.abspath(__file__), r'..\RKDevTool') 803af6ab5fSopenharmony_ci if not os.path.exists(rk_tool_exe_path): 813af6ab5fSopenharmony_ci get_tool() 823af6ab5fSopenharmony_ci os.chdir(rk_tool_exe_path) 833af6ab5fSopenharmony_ci job('hdc shell reboot bootloader') 843af6ab5fSopenharmony_ci app = Application(backend='uia').start('RKDevTool.exe') 853af6ab5fSopenharmony_ci dlg = app.top_window() 863af6ab5fSopenharmony_ci 873af6ab5fSopenharmony_ci while True: 883af6ab5fSopenharmony_ci mode = dlg.window(control_type="Tab").window_text() 893af6ab5fSopenharmony_ci if mode == 'Found One LOADER Device': 903af6ab5fSopenharmony_ci print('start burning') 913af6ab5fSopenharmony_ci dlg.window(title="Run").click() 923af6ab5fSopenharmony_ci time.sleep(100) 933af6ab5fSopenharmony_ci end_burn(dlg) 943af6ab5fSopenharmony_ci return 953af6ab5fSopenharmony_ci else: 963af6ab5fSopenharmony_ci time.sleep(1) 973af6ab5fSopenharmony_ci 983af6ab5fSopenharmony_ci 993af6ab5fSopenharmony_ciif __name__ == '__main__': 1003af6ab5fSopenharmony_ci auto_burn()