def onWork(self): ret, output = runcmd('adb shell rm "%s"' % Setting.DEVICE_CIT_RESULT_PATH) if ret != 0: Log.w('CIT RESULT not exists\n%s' % output) # TODO: push other files, so cmds = [] cmds.append('adb remount') cmds.append('adb push data/audio.primary.imx6.so /system/lib/hw/') cmds.append('adb push data/libinputflinger.so /system/lib/') cmds.append('adb push data/gralloc.imx6.so /system/lib/hw/') success_snipptes = ['remount succeeded', 'KB/s',] for cmd in cmds: ret, output = runcmd(cmd) Log.d(cmd) output = output.strip() if ret != 0: self.err = output return self.FAILED # match success outputs matchsnippet = False for snippet in success_snipptes: if snippet in output: matchsnippet = True break if matchsnippet: continue if output: self.err = output return self.FAILED return super(UpdateCITWork, self).onWork()
def jsonloads(self, content): Log.d('response --> %s' % content) try: return jloads(content) except: from factcore.works.workflow import BaseWork return {'ret': BaseWork.FAILED, 'desc': 'Program exception %s' % \ traceback.format_exc()}
def checkStep(self, sn, step): url = Setting.BASE_CHECKSTEP_URL % {'sn': sn, 'step': Setting.getStepInt(step)} Log.d(url) try: resp = requests.get(url) except: from factcore.works.workflow import BaseWork return {'ret': BaseWork.FAILED, 'desc': u'不能连接服务器'} return self.jsonloads(resp.text)
def onContinue(self, pass_or_failed): param = self.ui.entry.get().strip() sn = self.getSn() Log.d(u'%s -> %s' % (self.getName(), repr(sn))) if sn != param: return BaseWork.FAILED else: return BaseWork.SUCCESS self.ctx.setSn(sn) return BaseWork.onContinue(self, self.result)
def uploadResult(self, sn, step, result, descobj={}): url = Setting.BASE_STEP_URL % {'sn': sn, 'step': Setting.getStepInt(step), 'result': result} Log.d(url) data = jdumps(descobj, ensure_ascii=False).encode('utf8') try: resp = requests.post(url, params={}, data=data) except: from factcore.works.workflow import BaseWork return {'ret': BaseWork.FAILED, 'desc': u'不能连接服务器'} return self.jsonloads(resp.text)
def reInitWorks(self): # debug check flags Log.d('reInitWorks') self.curwork = None for work in self.works: work.debugCheckFinishedFlags() self.win.cleanMainFrame() self.works = [] for cls in self.workclss: work = cls(self) self.works.append(work) work.onInit() work.ui.onInitUI(self.win.getMainFrame()) self.workiter = self.iterWork() self.win.showStartButton()
def onWork(self): cmds = [] cmds.append('adb remount') cmds.append('adb push data/cfg80211.ko /system/lib/modules/') cmds.append('adb push data/bcmdhd.ko /system/lib/modules/') cmds.append('adb push data/nvram.txt /etc/') cmds.append('adb push data/fw_bcmdhd.bin /etc/') cmds.append('adb push data/wl.dat /data/') cmds.append('adb shell "busybox chmod +x /data/wl.dat"') cmds.append('adb shell "insmod /system/lib/modules/cfg80211.ko"') cmds.append('adb shell "insmod /system/lib/modules/bcmdhd.ko nvram_path=/etc/nvram.txt firmware_path=/etc/fw_bcmdhd.bin"') cmds.append('adb shell "busybox ifconfig wlan0 up"') cmds.append('adb shell "/data/wl.dat scan"') success_snipptes = ['remount succeeded', 'KB/s', '(File exists)'] for cmd in cmds: ret, output = runcmd(cmd) Log.d(cmd) output = output.strip() if ret != 0: self.err = output return self.FAILED # match success outputs matchsnippet = False for snippet in success_snipptes: if snippet in output: matchsnippet = True break if matchsnippet: continue if output: self.err = output return self.FAILED # wait scan results perpared cmd = 'adb shell "/data/wl.dat" scanresults' expectstr = '/data/wl.dat: Not Ready' while True: sleep(1) ret, output = runcmd(cmd) if expectstr not in output: break return BaseWork.onWork(self)
def _start(self): Log.i('start do...') # check previous status, if failed, break return if self.curwork and self.curwork.result == BaseWork.FAILED: self._endCurrentWork() self.win.showRestartButton() return if self.workiter is None: self.workiter = self.iterWork() while True: work = self.workiter.next() if work == None: self.reset() break Log.d('%s->%s' % (work, BaseWork.ResultToName(work.result))) if work.result == BaseWork.PAUSE: break elif work.result == BaseWork.FAILED: self._endCurrentWork() self.win.showRestartButton() break
def onWork(self): ''' Invoke: 工作函数主体, 返回 PAUSE 时等待用户输入entry或者等待点击按钮''' if self.ui_hasentry: return BaseWork.PAUSE ret, output = runcmd(self.cmd) if ret != 0: Log.e('[%s]runcmd failed -> %s' % (self.getName(), self.cmd)) self.err = output return BaseWork.FAILED m = compile(self.expect).search(output) if m: Log.d('(SUCCESS)[%s] %s -> match %s' % (self.getName(), self.expect, m.groups())) return BaseWork.SUCCESS else: Log.raw('Output:\n%s' % output) Log.e('(FAILED)[%s] %s -> not match' % (self.getName(), self.expect)) self.err = output return BaseWork.FAILED
def onDebugWork(self): if self.ui_hasentry: return BaseWork.PAUSE if Setting.DEBUG_SUCCESS: output = self.debugSuccessOutput() else: output = self.debugFailedOutput() m = compile(self.expect).search(output) if m: Log.i('(SUCCESS)DebugWork!!![%s] "%s" -> match %s' % (self.getName(), self.expect, m.groups())) return BaseWork.SUCCESS else: Log.raw('Output:\n%s' % output) Log.e('(FAILED)DebugWork!!![%s] "%s" -> not match' % (self.getName(), self.expect)) self.err = output return BaseWork.FAILED