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()