1ba991379Sopenharmony_ci#-*- coding:utf-8 -*- 2ba991379Sopenharmony_ciimport uuid 3ba991379Sopenharmony_ciimport sys 4ba991379Sopenharmony_ciimport subprocess 5ba991379Sopenharmony_ciimport os 6ba991379Sopenharmony_ciimport serial 7ba991379Sopenharmony_ciimport datetime 8ba991379Sopenharmony_ci 9ba991379Sopenharmony_cifrom core.base import BaseApp, dec_stepmsg 10ba991379Sopenharmony_cifrom util.file_locker import FileLock 11ba991379Sopenharmony_cifrom util.log_info import logger 12ba991379Sopenharmony_cifrom util.time_info import get_now_time_str_info, get_now_time_info, Timeout, timeout 13ba991379Sopenharmony_cifrom aw.Telnet.TelnetClient import TelConnect 14ba991379Sopenharmony_cifrom aw.Common.Constant import CONSTANT 15ba991379Sopenharmony_cifrom aw.Download.Download import * 16ba991379Sopenharmony_cifrom aw.Common.Common import getHostIp, copyFile, copyDirectory 17ba991379Sopenharmony_cifrom aw.ExtractFile.ExtractFile import * 18ba991379Sopenharmony_cifrom aw.poweronoff.serial_power_on_off import usbPowerOnOff, usbPowerOnOffV2 19ba991379Sopenharmony_cifrom threading import Thread 20ba991379Sopenharmony_cifrom subprocess import getstatusoutput 21ba991379Sopenharmony_ci 22ba991379Sopenharmony_cilock_suffix = CONSTANT.File.LOCK_SUFFIX #通过文件锁实现并发下载 23ba991379Sopenharmony_cisuc_file = CONSTANT.File.SUC_FILE #通过本文件是区分版本是否成功下载 24ba991379Sopenharmony_cifailed_file = CONSTANT.File.FAILED_FILE #通过本文件是标记文件下载失败 25ba991379Sopenharmony_ciREAD_MAXTIMEOUT = 5 26ba991379Sopenharmony_ciREAD_TIMEOUT = 5 27ba991379Sopenharmony_ciREAD_MINITIMEOUT = 2 28ba991379Sopenharmony_ciuboot_finish = 'hisilicon #' 29ba991379Sopenharmony_cicmd_finish = ' #' 30ba991379Sopenharmony_cierror_str_list = ['Unknown', '发送起始帧失败', '发送头帧失败'] 31ba991379Sopenharmony_ci 32ba991379Sopenharmony_ci_is_download_success = False 33ba991379Sopenharmony_ci 34ba991379Sopenharmony_ci 35ba991379Sopenharmony_ciclass liteOsUpgrade_L2(BaseApp): 36ba991379Sopenharmony_ci 37ba991379Sopenharmony_ci def __init__(self, param_file): 38ba991379Sopenharmony_ci super().__init__(param_file) 39ba991379Sopenharmony_ci self.param_List = ["deploy_com", 40ba991379Sopenharmony_ci "usb_port", 41ba991379Sopenharmony_ci "upgrade_upgradeLocation"] 42ba991379Sopenharmony_ci 43ba991379Sopenharmony_ci @dec_stepmsg("hongmeng L2 flash") 44ba991379Sopenharmony_ci def excute(self): 45ba991379Sopenharmony_ci ''' 46ba991379Sopenharmony_ci #=================================================================================== 47ba991379Sopenharmony_ci # @Method: excute(self) 48ba991379Sopenharmony_ci # @Precondition: none 49ba991379Sopenharmony_ci # @Func: 升级执行入口 50ba991379Sopenharmony_ci # @PostStatus: none 51ba991379Sopenharmony_ci # @eg: excute() 52ba991379Sopenharmony_ci # @return: True or Flase 53ba991379Sopenharmony_ci #=================================================================================== 54ba991379Sopenharmony_ci ''' 55ba991379Sopenharmony_ci step_index = self.params_dict.get("step_list").index("liteOsUpgrade_L2_app") 56ba991379Sopenharmony_ci 57ba991379Sopenharmony_ci # 执行下载 58ba991379Sopenharmony_ci try: 59ba991379Sopenharmony_ci if not self.download(): 60ba991379Sopenharmony_ci CONSTANT.ENVERRMESSAGE = "image download fail" 61ba991379Sopenharmony_ci logger.printLog(CONSTANT.ENVERRMESSAGE) 62ba991379Sopenharmony_ci return False 63ba991379Sopenharmony_ci except Exception as e: 64ba991379Sopenharmony_ci raise e 65ba991379Sopenharmony_ci 66ba991379Sopenharmony_ci 67ba991379Sopenharmony_ci # 执行升级 68ba991379Sopenharmony_ci try: 69ba991379Sopenharmony_ci if not self.upgrade(): 70ba991379Sopenharmony_ci CONSTANT.ENVERRMESSAGE = "board upgrade fail" 71ba991379Sopenharmony_ci logger.printLog(CONSTANT.ENVERRMESSAGE) 72ba991379Sopenharmony_ci return False 73ba991379Sopenharmony_ci return True 74ba991379Sopenharmony_ci except Exception as e: 75ba991379Sopenharmony_ci raise e 76ba991379Sopenharmony_ci 77ba991379Sopenharmony_ci @dec_stepmsg("download") 78ba991379Sopenharmony_ci @timeout(18000) 79ba991379Sopenharmony_ci def download(self): 80ba991379Sopenharmony_ci ''' 81ba991379Sopenharmony_ci #=================================================================================== 82ba991379Sopenharmony_ci # @Method: download(self) 83ba991379Sopenharmony_ci # @Precondition: none 84ba991379Sopenharmony_ci # @Func: 构建下载到本地的路径,执行相应包的下载 85ba991379Sopenharmony_ci # @PostStatus: none 86ba991379Sopenharmony_ci # @eg: download() 87ba991379Sopenharmony_ci # @return: True or Flase 88ba991379Sopenharmony_ci #=================================================================================== 89ba991379Sopenharmony_ci ''' 90ba991379Sopenharmony_ci global version_savepath, version_name, _is_download_success 91ba991379Sopenharmony_ci dir_path = CONSTANT.Path.getDirPath() 92ba991379Sopenharmony_ci if self.params_dict.get("pbiid"): 93ba991379Sopenharmony_ci version_path = self.params_dict.get("pbiid") 94ba991379Sopenharmony_ci version_name = str(uuid.uuid5(uuid.NAMESPACE_URL, str(self.params_dict.get("pbiid")) + "FASTBOOT")) 95ba991379Sopenharmony_ci version_savepath = os.path.join(dir_path, self.params_dict.get("flash_type"), version_name) 96ba991379Sopenharmony_ci else: 97ba991379Sopenharmony_ci version_path = self.params_dict.get("upgrade_upgradeLocation") 98ba991379Sopenharmony_ci version_name = str(uuid.uuid5(uuid.NAMESPACE_URL, (self.params_dict.get("upgrade_upgradeLocation")))) 99ba991379Sopenharmony_ci version_savepath = os.path.join(dir_path, version_name) 100ba991379Sopenharmony_ci 101ba991379Sopenharmony_ci if self.params_dict.get("isDownload") == "True": 102ba991379Sopenharmony_ci logger.printLog("不需要做下载,直接返回") 103ba991379Sopenharmony_ci return True 104ba991379Sopenharmony_ci 105ba991379Sopenharmony_ci #执行img下载 106ba991379Sopenharmony_ci import hashlib 107ba991379Sopenharmony_ci save_file_str = version_path.replace("/", "").replace("\\", "") 108ba991379Sopenharmony_ci save_file_name = hashlib.sha1(save_file_str.encode("utf-8")).hexdigest() 109ba991379Sopenharmony_ci logger.info("download hash value:%s" % (save_file_name)) 110ba991379Sopenharmony_ci save_path_file = os.path.join(dir_path, "record", "%s%s" % (save_file_name, ".txt")) 111ba991379Sopenharmony_ci logger.printLog('save_path_file: %s' % save_path_file) 112ba991379Sopenharmony_ci if not self.excutedown(version_path, os.path.join(version_savepath, "img"), save_path_file, False): 113ba991379Sopenharmony_ci logger.error("download img fail") 114ba991379Sopenharmony_ci return False 115ba991379Sopenharmony_ci _is_download_success = True 116ba991379Sopenharmony_ci #保存本地版本路径给devicetest去版本路径下取用例 117ba991379Sopenharmony_ci saveVersion(save_path_file, os.path.join(version_savepath, "img")) 118ba991379Sopenharmony_ci 119ba991379Sopenharmony_ci return True 120ba991379Sopenharmony_ci 121ba991379Sopenharmony_ci def excutedown(self, source_path, download_dir, suc_mark, is_file): 122ba991379Sopenharmony_ci ''' 123ba991379Sopenharmony_ci #=================================================================================== 124ba991379Sopenharmony_ci # @Method: excutedown(source_path, download_dir, is_file) 125ba991379Sopenharmony_ci # @Precondition: none 126ba991379Sopenharmony_ci # @Func: 执行下载动作 127ba991379Sopenharmony_ci # @PostStatus: none 128ba991379Sopenharmony_ci # @Param: source_path:资源文件路径 129ba991379Sopenharmony_ci # download_dir:文件下载到本地的文件夹路径 130ba991379Sopenharmony_ci # is_file:是否是文件 131ba991379Sopenharmony_ci # 132ba991379Sopenharmony_ci # @eg: excutedown("xxxx", "D:\\local\\image", Flase, os_method) 133ba991379Sopenharmony_ci # @return: True or Flase 134ba991379Sopenharmony_ci #=================================================================================== 135ba991379Sopenharmony_ci ''' 136ba991379Sopenharmony_ci failed_mark = os.path.join(download_dir, failed_file) 137ba991379Sopenharmony_ci lock_path = os.path.join(download_dir, lock_suffix) 138ba991379Sopenharmony_ci file_lock = FileLock() 139ba991379Sopenharmony_ci 140ba991379Sopenharmony_ci if isDownLoadSuccess(download_dir, suc_mark, failed_mark): 141ba991379Sopenharmony_ci return True 142ba991379Sopenharmony_ci try: 143ba991379Sopenharmony_ci nowtime = get_now_time_str_info() 144ba991379Sopenharmony_ci logger.printLog("%s Downloading, please wait" % nowtime) 145ba991379Sopenharmony_ci file_lock.lockFile(lock_path) 146ba991379Sopenharmony_ci ret = "" 147ba991379Sopenharmony_ci logger.info("Get lock. Start to ") 148ba991379Sopenharmony_ci if self.params_dict.get("bt_enable") and self.params_dict.get("bt_enable") == "True": 149ba991379Sopenharmony_ci ret = downloadByBitComet(source_path, download_dir, os_method) 150ba991379Sopenharmony_ci elif source_path.startswith('\\\\'): 151ba991379Sopenharmony_ci ret = downloadByCopy(source_path, download_dir, is_file) 152ba991379Sopenharmony_ci elif self.params_dict.get("pbiid"): 153ba991379Sopenharmony_ci ret = downlaodByDownloadTool(version_savepath, self.params_dict.get("version_type"), "FASTBOOT", self.params_dict.get("pbiid")) 154ba991379Sopenharmony_ci elif source_path.startswith("http"): 155ba991379Sopenharmony_ci ret = downloadFileFromDevCloud(source_path, "", "", download_dir) 156ba991379Sopenharmony_ci 157ba991379Sopenharmony_ci if source_path.endswith(".zip"): 158ba991379Sopenharmony_ci zip_name = os.path.basename(source_path) 159ba991379Sopenharmony_ci ret = extractZipFile(os.path.join(download_dir, zip_name), download_dir) 160ba991379Sopenharmony_ci if source_path.endswith(".tar.gz") or (source_path.startswith("http") and ("file_id=" in source_path)): 161ba991379Sopenharmony_ci if source_path.startswith("http") and ("file_id=" in source_path): 162ba991379Sopenharmony_ci if source_path.endswith(".tar.gz"): 163ba991379Sopenharmony_ci zip_name = source_path.split('=')[-1] 164ba991379Sopenharmony_ci else: 165ba991379Sopenharmony_ci zip_name = "out.tar.gz" 166ba991379Sopenharmony_ci else: 167ba991379Sopenharmony_ci zip_name = os.path.basename(source_path) 168ba991379Sopenharmony_ci logger.printLog(f'tar_file:{os.path.join(download_dir, zip_name)},dest_file:{download_dir}') 169ba991379Sopenharmony_ci ret = unTarFile(os.path.join(download_dir, zip_name), download_dir) 170ba991379Sopenharmony_ci nowtime = get_now_time_str_info() 171ba991379Sopenharmony_ci logger.printLog("%s download to %s end" % (nowtime, download_dir)) 172ba991379Sopenharmony_ci 173ba991379Sopenharmony_ci if not ret: 174ba991379Sopenharmony_ci with open(failed_mark, "a+") as fp: 175ba991379Sopenharmony_ci fp.write("") 176ba991379Sopenharmony_ci return ret 177ba991379Sopenharmony_ci except Exception as e: 178ba991379Sopenharmony_ci logger.printLog(e) 179ba991379Sopenharmony_ci raise Exception(e) 180ba991379Sopenharmony_ci finally: 181ba991379Sopenharmony_ci file_lock.releaseFile() 182ba991379Sopenharmony_ci 183ba991379Sopenharmony_ci 184ba991379Sopenharmony_ci @dec_stepmsg("upgrade") 185ba991379Sopenharmony_ci #@timeout(900) 186ba991379Sopenharmony_ci def upgrade(self): 187ba991379Sopenharmony_ci ''' 188ba991379Sopenharmony_ci #=================================================================================== 189ba991379Sopenharmony_ci # @Method: upgrade(self) 190ba991379Sopenharmony_ci # @Precondition: none 191ba991379Sopenharmony_ci # @Func: 升级相关业务逻辑 192ba991379Sopenharmony_ci # @PostStatus: none 193ba991379Sopenharmony_ci # @eg: upgrade() 194ba991379Sopenharmony_ci # @return: True or Flase 195ba991379Sopenharmony_ci #=================================================================================== 196ba991379Sopenharmony_ci ''' 197ba991379Sopenharmony_ci global _is_download_success 198ba991379Sopenharmony_ci logger.printLog('开始升级') 199ba991379Sopenharmony_ci deploy_com = self.params_dict.get("deploy_com") 200ba991379Sopenharmony_ci usb_port = self.params_dict.get("usb_port") 201ba991379Sopenharmony_ci baudrate = self.params_dict.get("baudrate") 202ba991379Sopenharmony_ci #芯片类型,根据芯片类型获取对应的刷机命令 203ba991379Sopenharmony_ci flash_type = self.params_dict.get("flash_type") 204ba991379Sopenharmony_ci burn_usbport = self.params_dict.get("hiburn_usbport") 205ba991379Sopenharmony_ci device_ip = self.params_dict.get("Device_IP") 206ba991379Sopenharmony_ci device_netmask = self.params_dict.get("Device_Netmask") 207ba991379Sopenharmony_ci device_gatewayip = self.params_dict.get("Device_GatewayIP") 208ba991379Sopenharmony_ci chip_version = self.params_dict.get('chip_version') 209ba991379Sopenharmony_ci chip_version = chip_version.lower() if chip_version else chip_version 210ba991379Sopenharmony_ci sn = self.params_dict.get('sn') 211ba991379Sopenharmony_ci 212ba991379Sopenharmony_ci if not deploy_com: 213ba991379Sopenharmony_ci logger.error("deploy_com is NULL !!") 214ba991379Sopenharmony_ci return False 215ba991379Sopenharmony_ci if not burn_usbport: 216ba991379Sopenharmony_ci logger.error("hiburn_usbport is NULL !!") 217ba991379Sopenharmony_ci return False 218ba991379Sopenharmony_ci if not baudrate: 219ba991379Sopenharmony_ci baudrate = 115200 220ba991379Sopenharmony_ci #执行下载 221ba991379Sopenharmony_ci t_download = Thread(target=self.download, args=()) 222ba991379Sopenharmony_ci t_download.start() 223ba991379Sopenharmony_ci scriptpath = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))) 224ba991379Sopenharmony_ci #升级需要的工具归档 225ba991379Sopenharmony_ci toolworkspace = CONSTANT.OSType.getworkspace() 226ba991379Sopenharmony_ci hiburntoolpath = os.path.join(toolworkspace, "HiBurnCmdLine", "usb%s_tool" % burn_usbport) 227ba991379Sopenharmony_ci logger.info("hiburn tool path is: %s" % hiburntoolpath) 228ba991379Sopenharmony_ci if not os.path.exists(hiburntoolpath): 229ba991379Sopenharmony_ci if not burn_usbport: 230ba991379Sopenharmony_ci logger.error("hiburn_usbport is NULL !!") 231ba991379Sopenharmony_ci return False 232ba991379Sopenharmony_ci os.makedirs(hiburntoolpath) 233ba991379Sopenharmony_ci toolpath = os.path.join(scriptpath, "resource", "HiBurnCmdLine.zip") 234ba991379Sopenharmony_ci logger.info("copy %s to %s" % (toolpath, hiburntoolpath)) 235ba991379Sopenharmony_ci copyFile(toolpath, hiburntoolpath) 236ba991379Sopenharmony_ci zip_name = os.path.basename(toolpath) 237ba991379Sopenharmony_ci ret = extractZipFile(os.path.join(hiburntoolpath, zip_name), hiburntoolpath) 238ba991379Sopenharmony_ci if ret: 239ba991379Sopenharmony_ci logger.info("unzip to %s succ" % (hiburntoolpath)) 240ba991379Sopenharmony_ci #修改burn.config中的usb口 241ba991379Sopenharmony_ci configpath = os.path.join(hiburntoolpath, "config", "burn.config") 242ba991379Sopenharmony_ci all_data = "" 243ba991379Sopenharmony_ci with open(configpath, "r", encoding="utf-8") as cf: 244ba991379Sopenharmony_ci for line in cf: 245ba991379Sopenharmony_ci if "usbDeviceNumber=" in line: 246ba991379Sopenharmony_ci old_str = line 247ba991379Sopenharmony_ci line = line.replace(old_str, "usbDeviceNumber=%s\r\n" % burn_usbport) 248ba991379Sopenharmony_ci logger.info("replace line: %s " % line) 249ba991379Sopenharmony_ci all_data += line 250ba991379Sopenharmony_ci with open(configpath, "w", encoding="utf-8") as wf: 251ba991379Sopenharmony_ci wf.write(all_data) 252ba991379Sopenharmony_ci else: 253ba991379Sopenharmony_ci logger.error("%s is not exit" % hiburntoolpath) 254ba991379Sopenharmony_ci return False 255ba991379Sopenharmony_ci os.chdir(hiburntoolpath) 256ba991379Sopenharmony_ci if flash_type.lower() == "ev300": 257ba991379Sopenharmony_ci chip_type = "Hi3518EV300" 258ba991379Sopenharmony_ci elif flash_type.lower() == "dv300": 259ba991379Sopenharmony_ci chip_type = "Hi3516DV300" 260ba991379Sopenharmony_ci else: 261ba991379Sopenharmony_ci logger.error("flash_type is : %s " % flash_type) 262ba991379Sopenharmony_ci return False 263ba991379Sopenharmony_ci #擦除fastboot 264ba991379Sopenharmony_ci logger.printLog('erase fastboot') 265ba991379Sopenharmony_ci flash_uboot_xml = os.path.join(scriptpath, "resource", "L2", flash_type.lower(), "flash_fastboot.xml") 266ba991379Sopenharmony_ci cmd = ".\jre\\bin\java -jar hiburn.jar --erase -n %s -m serial %s -x %s" % (chip_type, deploy_com.upper(), flash_uboot_xml) 267ba991379Sopenharmony_ci self.eraseDevice(cmd, usb_port) 268ba991379Sopenharmony_ci t_download.join() 269ba991379Sopenharmony_ci # 检查下载是否成功 270ba991379Sopenharmony_ci if not _is_download_success: 271ba991379Sopenharmony_ci return False 272ba991379Sopenharmony_ci 273ba991379Sopenharmony_ci #将升级需要的文件拷贝到镜像里面 274ba991379Sopenharmony_ci local_image_path = os.path.join(version_savepath, "img") 275ba991379Sopenharmony_ci old_xml_path = os.path.join(scriptpath, "resource", "L2", flash_type, "Hi3516DV300-emmc.xml") 276ba991379Sopenharmony_ci xml_path = os.path.join(local_image_path, "Hi3516DV300-emmc.xml") 277ba991379Sopenharmony_ci copyFile(old_xml_path, xml_path) 278ba991379Sopenharmony_ci # copyFile(ubootpath, local_image_path) 279ba991379Sopenharmony_ci scriptfile = os.path.join(scriptpath, "resource", "L2", f'{flash_type.lower()}', "update.txt") 280ba991379Sopenharmony_ci logger.info(f'scriptfile:{scriptfile}') 281ba991379Sopenharmony_ci 282ba991379Sopenharmony_ci logger.printLog('进行烧写') 283ba991379Sopenharmony_ci retry = 0 284ba991379Sopenharmony_ci while retry < 3: 285ba991379Sopenharmony_ci #usb刷机 286ba991379Sopenharmony_ci cmd = ".\jre\\bin\java -jar hiburn.jar --burn -n %s -m USBBootrom -x %s" % (chip_type, xml_path) 287ba991379Sopenharmony_ci logger.info("cmd is: %s" % cmd) 288ba991379Sopenharmony_ci ret, outpri = subprocess.getstatusoutput(cmd) 289ba991379Sopenharmony_ci logger.info("usb upgrade result: %s " % ret) 290ba991379Sopenharmony_ci logger.info("print console: %s " % outpri) 291ba991379Sopenharmony_ci if ret != 0: 292ba991379Sopenharmony_ci if ret == 4 and retry < 2: 293ba991379Sopenharmony_ci time.sleep(10) 294ba991379Sopenharmony_ci retry = retry + 1 295ba991379Sopenharmony_ci logger.info('flash fail,so flash once again') 296ba991379Sopenharmony_ci continue 297ba991379Sopenharmony_ci logger.info(ret) 298ba991379Sopenharmony_ci logger.error("hiburn usb upgrade failed!!") 299ba991379Sopenharmony_ci return False 300ba991379Sopenharmony_ci retry = retry + 3 301ba991379Sopenharmony_ci os.chdir(current_path) 302ba991379Sopenharmony_ci logger.info("hiburn upgrade end, check board status") 303ba991379Sopenharmony_ci logger.info("为保持hdc稳定性,等待60秒") 304ba991379Sopenharmony_ci time.sleep(60) 305ba991379Sopenharmony_ci try: 306ba991379Sopenharmony_ci #pass 307ba991379Sopenharmony_ci self.hdc_set_time(sn) 308ba991379Sopenharmony_ci except Exception as e: 309ba991379Sopenharmony_ci logger.printLog('hdc设置时间超时') 310ba991379Sopenharmony_ci logger.printLog(str(e)) 311ba991379Sopenharmony_ci try: 312ba991379Sopenharmony_ci logger.info("打开serial") 313ba991379Sopenharmony_ci ser = serial.Serial(deploy_com, int(baudrate), timeout=0) 314ba991379Sopenharmony_ci if ser.is_open == False: 315ba991379Sopenharmony_ci ser.open() 316ba991379Sopenharmony_ci logger.info("get device status") 317ba991379Sopenharmony_ci board_type = getBoardType(ser) 318ba991379Sopenharmony_ci if board_type == "OHOS" and self.checkStatus(ser): 319ba991379Sopenharmony_ci return True 320ba991379Sopenharmony_ci 321ba991379Sopenharmony_ci # ret = sendCmd(ser, 'sa;reset;', READ_MAXTIMEOUT) 322ba991379Sopenharmony_ci # board_type = getBoardType(ser) 323ba991379Sopenharmony_ci # if board_type != "OHOS": 324ba991379Sopenharmony_ci # logger.error("upgrade fail") 325ba991379Sopenharmony_ci # return False 326ba991379Sopenharmony_ci else: 327ba991379Sopenharmony_ci return False 328ba991379Sopenharmony_ci except Exception as e: 329ba991379Sopenharmony_ci logger.info(str(e)) 330ba991379Sopenharmony_ci return False 331ba991379Sopenharmony_ci finally: 332ba991379Sopenharmony_ci ser.close() 333ba991379Sopenharmony_ci logger.info("close serial") 334ba991379Sopenharmony_ci 335ba991379Sopenharmony_ci def checkStatus(self, ser): 336ba991379Sopenharmony_ci time.sleep(180) 337ba991379Sopenharmony_ci # print('wait 120 seconds') 338ba991379Sopenharmony_ci ren_cmd = 'ps -elf | grep render_service' 339ba991379Sopenharmony_ci laun_cmd = 'ps -elf | grep com.ohos.launcher' 340ba991379Sopenharmony_ci time.sleep(10) 341ba991379Sopenharmony_ci ren_status_1 = getPsPid(ser, ren_cmd, 'render_service') 342ba991379Sopenharmony_ci time.sleep(5) 343ba991379Sopenharmony_ci ren_status_2 = getPsPid(ser, ren_cmd, 'render_service') 344ba991379Sopenharmony_ci time.sleep(5) 345ba991379Sopenharmony_ci laun_status_1 = getPsPid(ser, laun_cmd, 'com.ohos.launcher') 346ba991379Sopenharmony_ci time.sleep(5) 347ba991379Sopenharmony_ci laun_status_2 = getPsPid(ser, laun_cmd, 'com.ohos.launcher') 348ba991379Sopenharmony_ci # wes_cmd = 'pidof weston' 349ba991379Sopenharmony_ci # laun_cmd = 'pidof com.ohos.launcher' 350ba991379Sopenharmony_ci # time.sleep(10) 351ba991379Sopenharmony_ci # wes_status_1 = sendCmd(ser, wes_cmd, READ_TIMEOUT) 352ba991379Sopenharmony_ci # time.sleep(5) 353ba991379Sopenharmony_ci # wes_status_2 = sendCmd(ser, wes_cmd, READ_TIMEOUT) 354ba991379Sopenharmony_ci # time.sleep(5) 355ba991379Sopenharmony_ci # laun_status_1 = sendCmd(ser, laun_cmd, READ_TIMEOUT) 356ba991379Sopenharmony_ci # time.sleep(5) 357ba991379Sopenharmony_ci # laun_status_2 = sendCmd(ser, laun_cmd, READ_TIMEOUT) 358ba991379Sopenharmony_ci logger.info('ren_status_1: %s ren_status_2: %s laun_1: %s laun_2: %s '%(ren_status_1,ren_status_2,laun_status_1,laun_status_2)) 359ba991379Sopenharmony_ci if ren_status_1 and ren_status_1 == ren_status_2 and laun_status_1 and laun_status_1 == laun_status_2: 360ba991379Sopenharmony_ci return True 361ba991379Sopenharmony_ci if not ren_status_1 or not ren_status_2 or ren_status_1 != ren_status_2: 362ba991379Sopenharmony_ci # and not wes_status_1.strip().isdigit() or not wes_status_2.strip().isdigit() 363ba991379Sopenharmony_ci logger.printLog('process render_service is not exist') 364ba991379Sopenharmony_ci if not laun_status_1 or not laun_status_2 : 365ba991379Sopenharmony_ci # or not laun_status_1.strip().isdigit() or not laun_status_2.strip().isdigit() 366ba991379Sopenharmony_ci logger.printLog('process com.ohos.launcher is not exist') 367ba991379Sopenharmony_ci return False 368ba991379Sopenharmony_ci 369ba991379Sopenharmony_ci @timeout(30) 370ba991379Sopenharmony_ci def hdc_set_time(self,sn): 371ba991379Sopenharmony_ci # todo 372ba991379Sopenharmony_ci y_m_d = time.strftime('%Y-%m-%d',time.localtime()) 373ba991379Sopenharmony_ci h_m_s = time.strftime('%H:%M:%S',time.localtime()) 374ba991379Sopenharmony_ci cmd = 'hdc_std -t %s shell date -u "%sT%s"'% (sn,y_m_d,h_m_s) 375ba991379Sopenharmony_ci logger.printLog('hdc start set time') 376ba991379Sopenharmony_ci logger.printLog('cmd is %s'% cmd) 377ba991379Sopenharmony_ci ret,out = subprocess.getstatusoutput(cmd) 378ba991379Sopenharmony_ci logger.printLog('hdc end set time') 379ba991379Sopenharmony_ci if h_m_s not in out: 380ba991379Sopenharmony_ci logger.printLog('hdc设置时间失败') 381ba991379Sopenharmony_ci logger.printLog(out) 382ba991379Sopenharmony_ci return False 383ba991379Sopenharmony_ci logger.printLog(out) 384ba991379Sopenharmony_ci 385ba991379Sopenharmony_ci def eraseDevice(self, cmd, usb_port): 386ba991379Sopenharmony_ci ''' 387ba991379Sopenharmony_ci ret 暂时没有作用,先使用out 388ba991379Sopenharmony_ci ''' 389ba991379Sopenharmony_ci erase_retry = 0 390ba991379Sopenharmony_ci while erase_retry < 3: 391ba991379Sopenharmony_ci # 通电 392ba991379Sopenharmony_ci PowerOnByThread(usb_port) 393ba991379Sopenharmony_ci logger.info("cmd is: %s" % cmd) 394ba991379Sopenharmony_ci ret, outpri = subprocess.getstatusoutput(cmd) 395ba991379Sopenharmony_ci logger.info("flash fastboot result: %s " % ret) 396ba991379Sopenharmony_ci logger.info("print console: %s " % outpri) 397ba991379Sopenharmony_ci is_earse_again = any([True if item in outpri else False for item in error_str_list]) 398ba991379Sopenharmony_ci if ret == 0 and erase_retry < 2 and not is_earse_again : 399ba991379Sopenharmony_ci logger.info('檫除成功'.center(20,'*')) 400ba991379Sopenharmony_ci break 401ba991379Sopenharmony_ci elif is_earse_again: 402ba991379Sopenharmony_ci logger.info('檫除存在问题 重新上下电 重新檫除') 403ba991379Sopenharmony_ci erase_retry += 1 404ba991379Sopenharmony_ci time.sleep(5) 405ba991379Sopenharmony_ci continue 406ba991379Sopenharmony_ci else: 407ba991379Sopenharmony_ci logger.info('other error') 408ba991379Sopenharmony_ci return False 409ba991379Sopenharmony_ci else: 410ba991379Sopenharmony_ci return False 411ba991379Sopenharmony_ci 412ba991379Sopenharmony_ci def catchEraseFail(self,cmd): 413ba991379Sopenharmony_ci logger.printLog(datetime.datetime.now()) 414ba991379Sopenharmony_ci ret, outpri = subprocess.getstatusoutput(cmd) 415ba991379Sopenharmony_ci logger.printLog(datetime.datetime.now()) 416ba991379Sopenharmony_ci return ret,outpri 417ba991379Sopenharmony_ci 418ba991379Sopenharmony_cidef getPsPid(ser, cmd, ps): 419ba991379Sopenharmony_ci try: 420ba991379Sopenharmony_ci data = sendCmd(ser, cmd, READ_TIMEOUT) 421ba991379Sopenharmony_ci logger.info(data) 422ba991379Sopenharmony_ci data = [item for item in data.split('\n') if 'grep' not in item and ps in item ] 423ba991379Sopenharmony_ci if len(data) < 1: 424ba991379Sopenharmony_ci return 425ba991379Sopenharmony_ci elif len(data) > 1: 426ba991379Sopenharmony_ci data = max(data, key=len, default='') 427ba991379Sopenharmony_ci logger.info(data) 428ba991379Sopenharmony_ci data = data[0].split() 429ba991379Sopenharmony_ci if len(data) < 1: 430ba991379Sopenharmony_ci return 431ba991379Sopenharmony_ci else: 432ba991379Sopenharmony_ci logger.info(data) 433ba991379Sopenharmony_ci return data[1] 434ba991379Sopenharmony_ci except Exception as e : 435ba991379Sopenharmony_ci logger.info(str(e)) 436ba991379Sopenharmony_ci logger.info('pid 获取失败') 437ba991379Sopenharmony_ci 438ba991379Sopenharmony_cidef PowerOnByThread(usb_port,wait_time=10): 439ba991379Sopenharmony_ci thread = Thread(target=boardPowerOn, args=[usb_port, wait_time]) 440ba991379Sopenharmony_ci thread.start() 441ba991379Sopenharmony_ci logger.info("thread board power on start") 442ba991379Sopenharmony_ci 443ba991379Sopenharmony_ci 444ba991379Sopenharmony_ci 445ba991379Sopenharmony_cidef boardPowerOn(usb_port, waittime): 446ba991379Sopenharmony_ci logger.info("board power on start") 447ba991379Sopenharmony_ci time.sleep(waittime) 448ba991379Sopenharmony_ci 449ba991379Sopenharmony_ci #对端口下电 450ba991379Sopenharmony_ci if not usbPowerOnOff('127.0.0.1', '7788', usb_port, "off"): 451ba991379Sopenharmony_ci logger.error("board power off failed") 452ba991379Sopenharmony_ci return False 453ba991379Sopenharmony_ci 454ba991379Sopenharmony_ci #对端口上电 455ba991379Sopenharmony_ci if not usbPowerOnOff('127.0.0.1', '7788', usb_port, "on"): 456ba991379Sopenharmony_ci logger.error("board power on failed") 457ba991379Sopenharmony_ci return False 458ba991379Sopenharmony_ci logger.info("board power on end") 459ba991379Sopenharmony_ci 460ba991379Sopenharmony_ci 461ba991379Sopenharmony_cidef getBoardType(ser): 462ba991379Sopenharmony_ci ret = sendCmd(ser, '\r', READ_TIMEOUT) 463ba991379Sopenharmony_ci if 'HMOS' in ret or 'OHOS' in ret or 'console:/ $' in ret or '#' in ret: 464ba991379Sopenharmony_ci ostype = 'OHOS' 465ba991379Sopenharmony_ci elif 'hisilicon' in ret: 466ba991379Sopenharmony_ci ostype = 'uboot' 467ba991379Sopenharmony_ci elif ' #' in ret: 468ba991379Sopenharmony_ci ostype = 'linux' 469ba991379Sopenharmony_ci else: 470ba991379Sopenharmony_ci ostype = 'bootrom' 471ba991379Sopenharmony_ci logger.info("board type is: %s" % ostype) 472ba991379Sopenharmony_ci return ostype 473ba991379Sopenharmony_ci 474ba991379Sopenharmony_cidef sendCmd(ser, cmd, timeout): 475ba991379Sopenharmony_ci logger.info("cmd is: %s " % cmd) 476ba991379Sopenharmony_ci ser.write((cmd + '\n').encode()) 477ba991379Sopenharmony_ci time.sleep(0.5) 478ba991379Sopenharmony_ci ret = '' 479ba991379Sopenharmony_ci i = 0 480ba991379Sopenharmony_ci while True: 481ba991379Sopenharmony_ci out = ser.read(ser.inWaiting()) 482ba991379Sopenharmony_ci if not out: 483ba991379Sopenharmony_ci break 484ba991379Sopenharmony_ci if i > 12: 485ba991379Sopenharmony_ci break 486ba991379Sopenharmony_ci ret = ret + out.decode(encoding="utf-8", errors="ignore") 487ba991379Sopenharmony_ci time.sleep(timeout) 488ba991379Sopenharmony_ci i = i + 1 489ba991379Sopenharmony_ci logger.info("result is: %s " % ret) 490ba991379Sopenharmony_ci return ret 491ba991379Sopenharmony_ci 492ba991379Sopenharmony_cidef sendHdcCmd(cmd): 493ba991379Sopenharmony_ci from subprocess import getstatusoutput 494ba991379Sopenharmony_ci i = 0 495ba991379Sopenharmony_ci while True: 496ba991379Sopenharmony_ci if i > 3: 497ba991379Sopenharmony_ci break 498ba991379Sopenharmony_ci try: 499ba991379Sopenharmony_ci out = executeHdcCmd(cmd) 500ba991379Sopenharmony_ci logger.info('hdc cmd success') 501ba991379Sopenharmony_ci return out 502ba991379Sopenharmony_ci except Exception as e: 503ba991379Sopenharmony_ci logger.info(str(e)) 504ba991379Sopenharmony_ci logger.info('hdc cmd fail') 505ba991379Sopenharmony_ci i += 1 506ba991379Sopenharmony_ci time.sleep(1) 507ba991379Sopenharmony_ci continue 508ba991379Sopenharmony_ci logger.error('hdc cmd execute fail by three times') 509ba991379Sopenharmony_ci return '' 510ba991379Sopenharmony_ci 511ba991379Sopenharmony_ci@timeout(10) 512ba991379Sopenharmony_cidef executeHdcCmd(cmd): 513ba991379Sopenharmony_ci logger.info('cmd is %s' % cmd) 514ba991379Sopenharmony_ci time.sleep(0.5) 515ba991379Sopenharmony_ci ret, out = getstatusoutput(cmd) 516ba991379Sopenharmony_ci time.sleep(0.5) 517ba991379Sopenharmony_ci if ret != 0: 518ba991379Sopenharmony_ci logger.info('execute fail') 519ba991379Sopenharmony_ci return 'execute fail' 520ba991379Sopenharmony_ci logger.info('result is %s'% out) 521ba991379Sopenharmony_ci return out 522ba991379Sopenharmony_ci 523ba991379Sopenharmony_ciif __name__ == '__main__': 524ba991379Sopenharmony_ci ser = serial.Serial('com5', 115200, timeout=0)