From b7496bd976d8ff7e4da95905e62af61c29fc64fd Mon Sep 17 00:00:00 2001 From: kos Date: Tue, 24 Apr 2012 17:25:42 +0900 Subject: [PATCH] fix bugs and add operation(add/remove apn). --- .../Plugins/SystemPlugins/3GModemManager/3gcommand | Bin 9168 -> 10336 bytes .../SystemPlugins/3GModemManager/apnlist.xml | 6 +- .../Plugins/SystemPlugins/3GModemManager/plugin.py | 288 ++++++++++++++++----- 3 files changed, 231 insertions(+), 63 deletions(-) diff --git a/lib/python/Plugins/SystemPlugins/3GModemManager/3gcommand b/lib/python/Plugins/SystemPlugins/3GModemManager/3gcommand index 531cc375cf592af8b8ba4aea6a8c96bcf4dc95d3..2a6a1db87022c18f380936c28e94b38e15e8d537 100644 GIT binary patch literal 10336 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 X0{(0sEhvxB{>5T diff --git a/lib/python/Plugins/SystemPlugins/3GModemManager/apnlist.xml b/lib/python/Plugins/SystemPlugins/3GModemManager/apnlist.xml index 6924747..efcd915 100644 --- a/lib/python/Plugins/SystemPlugins/3GModemManager/apnlist.xml +++ b/lib/python/Plugins/SystemPlugins/3GModemManager/apnlist.xml @@ -1,4 +1,4 @@ - - - + + + diff --git a/lib/python/Plugins/SystemPlugins/3GModemManager/plugin.py b/lib/python/Plugins/SystemPlugins/3GModemManager/plugin.py index 7788806..e2e047d 100644 --- a/lib/python/Plugins/SystemPlugins/3GModemManager/plugin.py +++ b/lib/python/Plugins/SystemPlugins/3GModemManager/plugin.py @@ -31,6 +31,8 @@ def printDebugModemMgr(msg): def printInfoModemMgr(msg): print "[ModemManager Plugin] Info >>", msg +isEmpty = lambda x: x is None or len(x)==0 + class DeviceEventListener: notifyCallbackFunctionList = [] def __init__(self): @@ -128,6 +130,8 @@ class TaskManager: class ParserHandler(handler.ContentHandler): nodeList = [] + def __init__(self): + self.nodeList = [] def startDocument(self): pass def endDocument(self): @@ -136,7 +140,7 @@ class ParserHandler(handler.ContentHandler): if name == 'apn': node = {} for attr in attrs.getNames(): - node[attr] = attrs.getValue(attr) + node[attr] = str(attrs.getValue(attr)) self.nodeList.append(node) def endElement(self, name): pass @@ -160,15 +164,26 @@ class EditModemManual(ConfigListScreen, Screen): + """ % param - def __init__(self, session, cbFuncClose, uid=None, pwd=None, pin=None, apn=None, phone='*99#'): + def __init__(self, session, cbFuncClose, uid=None, pwd=None, pin=None, apn=None, phone='*99#', isAdd=False): Screen.__init__(self, session) - self.cbFuncClose,self.uid,self.pwd,self.pin,self.apn,self.phone = cbFuncClose,uid,pwd,pin,apn,phone + self.cbFuncClose, self.isAdd = cbFuncClose, isAdd + + if isAdd: + self.uid,self.pwd,self.pin,self.apn,self.phone = "","","","","" + else: + self.uid,self.pwd,self.pin,self.apn,self.phone = uid,pwd,pin,apn,phone + if self.uid is None: self.uid = "" + if self.pwd is None: self.pwd = "" + if self.pin is None: self.pin = "" + if self.apn is None: self.apn = "" + if self.phone is None: self.phone = "" self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", "SetupActions",], { @@ -176,6 +191,7 @@ class EditModemManual(ConfigListScreen, Screen): "cancel": self.keyExit, "red": self.keyExit, "green": self.keyOK, + "blue": self.keyRemove, }, -2) self["VirtualKB"] = ActionMap(["VirtualKeyboardActions" ], @@ -189,23 +205,30 @@ class EditModemManual(ConfigListScreen, Screen): self["key_red"] = StaticText(_("Cancel")) self["key_green"] = StaticText(_("Save")) + self["key_blue"] = StaticText(_(self.isAdd and " " or "Remove")) self["VKeyIcon"] = Pixmap() self["HelpWindow"] = Pixmap() self["VirtualKB"].setEnabled(False) + if self.isAdd: + self.setTitle("3G Modem Manager Config Add") def createConfigList(self): + self.configName = ConfigText(default="", visible_width=50, fixed_size=False) self.configUserName = ConfigText(default=str(self.uid), visible_width=50, fixed_size=False) self.configPassword = ConfigText(default=str(self.pwd), visible_width=50, fixed_size=False) self.configAPN = ConfigText(default=str(self.apn), visible_width=50, fixed_size=False) self.configPIN = ConfigText(default=str(self.pin), visible_width=50, fixed_size=False) self.configPhone = ConfigText(default=str(self.phone), visible_width=50, fixed_size=False) + self.configEntryName = getConfigListEntry(_("Name :"), self.configName) self.configEntryUserName = getConfigListEntry(_("User :"), self.configUserName) self.configEntryPassword = getConfigListEntry(_("Password :"), self.configPassword) self.configEntryAPN = getConfigListEntry(_("APN :"), self.configAPN) self.configEntryPIN = getConfigListEntry(_("PIN :"), self.configPIN) self.configEntryPhone = getConfigListEntry(_("Phone :"), self.configPhone) + if self.isAdd: + self.configList.append(self.configEntryName) self.configList.append(self.configEntryUserName) self.configList.append(self.configEntryPassword) self.configList.append(self.configEntryAPN) @@ -217,6 +240,8 @@ class EditModemManual(ConfigListScreen, Screen): def getCurrentItem(self): currentPosition = self["config"].getCurrent() + if currentPosition == self.configEntryName: + return self.configName if currentPosition == self.configEntryUserName: return self.configUserName elif currentPosition == self.configEntryPassword: @@ -232,9 +257,11 @@ class EditModemManual(ConfigListScreen, Screen): def KeyText(self): currentItemValue = "" currentItem = self.getCurrentItem() - if currentItem is None: + if currentItem is not None: currentItemValue = currentItem.value - self.session.openWithCallback(self.cbKeyText, VirtualKeyBoard, title=("Please enter ap-info here"), text=currentItemValue) + if isEmpty(currentItemValue): + currentItemValue = "" + self.session.openWithCallback(self.cbKeyText, VirtualKeyBoard, title=("Please input here"), text=currentItemValue) def cbKeyText(self, data=None): if data is not None: @@ -245,17 +272,48 @@ class EditModemManual(ConfigListScreen, Screen): def keyExit(self): self.close() + def keyRemove(self): + if self.isAdd: + return + if self.cbFuncClose is not None: + self.cbFuncClose(isRemove = True) + self.close() + + def showKeyboard(self, ret=None): + self["VKeyIcon"].show() + current = self["config"].getCurrent() + if hasattr(current[1], 'help_window'): + if current[1].help_window.instance is not None: + current[1].help_window.instance.show() + + def hideKeyboard(self): + self["VKeyIcon"].hide() + current = self["config"].getCurrent() + if hasattr(current[1], 'help_window'): + if current[1].help_window.instance is not None: + current[1].help_window.instance.hide() + def keyOK(self): + message = '%s field is empty!!' + if isEmpty(self.configName.value) and self.isAdd: + self.hideKeyboard() + self.session.openWithCallback(self.showKeyboard, MessageBox, message%('Name'), MessageBox.TYPE_INFO) + return + if isEmpty(self.configAPN.value): + self.hideKeyboard() + self.session.openWithCallback(self.showKeyboard, MessageBox, message%('APN'), MessageBox.TYPE_INFO) + return + if self.cbFuncClose is not None: - self.uid = self.configUserName.value - self.pwd = self.configPassword.value - self.pin = self.configPIN.value - self.apn = self.configAPN.value + self.uid = self.configUserName.value + self.pwd = self.configPassword.value + self.pin = self.configPIN.value + self.apn = self.configAPN.value self.phone = self.configPhone.value - self.cbFuncClose(self.uid,self.pwd,self.pin,self.apn,self.phone) + self.name = self.isAdd and self.configName.value or None + self.cbFuncClose(self.uid,self.pwd,self.pin,self.apn,self.phone,self.name) self.close() - class ModemManual(Screen): skin = """ @@ -270,6 +328,7 @@ class ModemManual(Screen): + """ @@ -283,6 +342,7 @@ class ModemManual(Screen): "red": self.keyExit, "green": self.keyOK, "yellow": self.keyEdit, + "blue": self.keyAdd, "left": self.keyLeft, "right": self.keyRight, "up": self.keyUp, @@ -294,16 +354,91 @@ class ModemManual(Screen): self["key_red"] = StaticText(_("Cancel")) self["key_green"] = StaticText(_("OK")) self["key_yellow"] = StaticText(_("Edit")) + self["key_blue"] = StaticText(_("Add")) self["apnInfo"] = Label(' ') - self.updateAPNInfo() + self.keyUp() + + def keyAdd(self): + self.session.open(EditModemManual, self.cb3GManualSetting, isAdd=True) def keyEdit(self): self.session.open(EditModemManual, self.cb3GManualSetting, self.uid,self.pwd,self.pin,self.apn,self.phone) - def cb3GManualSetting(self, uid=None, pwd=None, pin=None, apn=None, phone='*99#'): - self.uid,self.pwd,self.pin,self.apn,self.phone = uid, pwd, pin, apn, phone + def cb3GManualSetting(self, uid=None, pwd=None, pin=None, apn=None, phone='*99#', name=None, isRemove=False): + if not isRemove: + self.uid = isEmpty(uid) and "" or uid + self.pwd = isEmpty(pwd) and "" or pwd + self.pin = isEmpty(pin) and "" or pin + self.apn = isEmpty(apn) and "" or apn + self.phone = isEmpty(phone) and "" or phone + + if name is not None: + self["menulist"].list.append((name, {'carrier':name, 'apn':self.apn, 'user':self.uid, 'password':self.pwd, 'pin':self.pin, 'phone':self.phone})) + self["menulist"].setList(self["menulist"].list) + self["menulist"].moveToIndex(len(self["menulist"].list)-1) + if isRemove: + index = 0 + newList = [] + selectedIndex = self["menulist"].getSelectionIndex() + for x in self["menulist"].list: + if index == selectedIndex: + index += 1 + continue + newList.append(x) + index += 1 + self["menulist"].setList(newList) + self["menulist"].moveToIndex(0) + self.setAPNInfo(True) + name = ' ' + if not isRemove and isEmpty(name): + self.updateAPNList() self.updateAPNInfo() + self.saveAPNList(name) + + def updateAPNList(self): + selectedIndex = self["menulist"].getSelectionIndex() + apnList = self["menulist"].list + currentListItem = apnList[selectedIndex][1] + + currentListItem['user'] = self.uid + currentListItem['apn'] = self.apn + currentListItem['password'] = self.pwd + currentListItem['pin'] = self.pin + currentListItem['phone'] = self.phone + + self["menulist"].setList(apnList) + + def saveAPNList(self, name=None): + apnList = self["menulist"].list + selectedIndex = self["menulist"].getSelectionIndex() + + def makeItem(carrier, apn, user, password, pin, phone): + printDebugModemMgr("%s, %s, %s, %s, %s, %s"%(carrier, apn, user, password, pin, phone)) + tempStr = ' >", err - pass + except Exception, err: pass + finally: del handle return lvApnItems class ModemManager(Screen): @@ -442,7 +587,7 @@ class ModemManager(Screen): #self.restartAppTimer = eTimer() #self.restartAppTimer.callback.append(self.cbRestartAppTimer) - + self.commandBin = resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/3GModemManager/3gcommand") self.forceStop = False def cbRestartAppTimer(self): @@ -480,6 +625,7 @@ class ModemManager(Screen): if self.isAttemptConnect(): return self.session.open(ModemManual, self.cb3GManualSetting, self.uid,self.pwd,self.pin,self.apn,self.phone) + #self.session.open(ModemManual, self.cb3GManualSetting) def keyReset(self): if self.isAttemptConnect(): @@ -497,12 +643,18 @@ class ModemManager(Screen): def keyExit(self): if self.isAttemptConnect(): - message = "Can't disconnect doring connecting.." - self.session.open(MessageBox, _(message), MessageBox.TYPE_INFO) + message = "Can't disconnect doring connecting..\nDo you want to forcibly exit?" + self.session.openWithCallback(self.cbForciblyExit, MessageBox, _(message), default = False) return self.udevListener.close() self.close() + def cbForciblyExit(self, result): + if result: + os.system('%s -s 6' % self.commandBin) + self.udevListener.close() + self.close() + def keyLeft(self): self["menulist"].pageUp() self.updateUSBInfo() @@ -563,25 +715,24 @@ class ModemManager(Screen): self.session.open(MessageBox, _(message), MessageBox.TYPE_INFO) return - commandBin = resolveFilename(SCOPE_CURRENT_PLUGIN, "SystemPlugins/3GModemManager/3gcommand") if self["key_green"].getText() == 'Disconnect': - cmd = "%s -s 0" % (commandBin) + cmd = "%s -s 0" % (self.commandBin) self.taskManager.append(cmd, self.cbPrintAvail, self.cbPrintClose) - cmd = "%s -s 1" % (commandBin) + cmd = "%s -s 1" % (self.commandBin) self.taskManager.append(cmd, self.cbPrintAvail, self.cbUnloadClose) self.taskManager.setStatusCB(self.setDisconnectStatus) else: - cmd = "%s -s 2 -e vendor=0x%s -e product=0x%s" % (commandBin, x.get("Vendor"), x.get("ProdID")) + cmd = "%s -s 2 -e vendor=0x%s -e product=0x%s" % (self.commandBin, x.get("Vendor"), x.get("ProdID")) self.taskManager.append(cmd, self.cbStep1PrintAvail, self.cbPrintClose) - cmd = "%s -s 3 -e %s:%s" % (commandBin, x.get("Vendor"), x.get("ProdID")) + cmd = "%s -s 3 -e %s:%s" % (self.commandBin, x.get("Vendor"), x.get("ProdID")) self.taskManager.append(cmd, self.cbPrintAvail, self.cbPrintClose) - cmd = "%s -s 4" % (commandBin) + cmd = "%s -s 4" % (self.commandBin) self.taskManager.append(cmd, self.cbStep3PrintAvail, self.cbMakeWvDialClose) - cmd = "%s -s 5" % (commandBin) + cmd = "%s -s 5" % (self.commandBin) self.taskManager.append(cmd, self.cbRunWvDialAvail, self.cbPrintClose) self.taskManager.setStatusCB(self.setConnectStatus) @@ -623,7 +774,7 @@ class ModemManager(Screen): def cbStep3PrintAvail(self, data): print data - if data.find('Sorry, no modem was detected') > -1: + if data.find('no modem was detected') > -1: self.forceStop = True def cbPrintAvail(self, data): @@ -633,7 +784,7 @@ class ModemManager(Screen): if self.forceStop: self.taskManager.clean() time.sleep(2) - message = "Occur error during connection...\nPlease, check log!!" + message = "Occur error during connection...\nPlease, Check your setting!!" self.session.open(MessageBox, _(message), MessageBox.TYPE_INFO) return self.taskManager.next() @@ -647,6 +798,9 @@ class ModemManager(Screen): def cbRunWvDialAvail(self, data): print data + if data.find('Bad init') > -1 or data.find('Invalid dial') > -1 or data.find('No Carrier') > -1: + self.forceStop = True + return if data.find('Pid of pppd:') > -1: self.taskManager.clean() time.sleep(2) @@ -656,6 +810,13 @@ class ModemManager(Screen): #self.restartAppTimer.start(3000) def cbMakeWvDialClose(self, ret): + if self.forceStop: + self.taskManager.clean() + time.sleep(2) + message = "Occur error during connection...\nPlease, Check your setting!!" + self.session.open(MessageBox, _(message), MessageBox.TYPE_INFO) + return + info = {} try: @@ -675,16 +836,11 @@ class ModemManager(Screen): # TODO : occur error!! return - if self.apn is not None: - info['apn'] = self.apn - if self.uid is not None: - info['uid'] = self.uid - if self.pwd is not None: - info['pwd'] = self.pwd - if self.pin is not None: - info['pin'] = self.pin - if self.phone is not None: - info['phone'] = self.phone + if not isEmpty(self.apn): info['apn'] = self.apn + if not isEmpty(self.uid): info['uid'] = self.uid + if not isEmpty(self.pwd): info['pwd'] = self.pwd + if not isEmpty(self.pin): info['pin'] = self.pin + if not isEmpty(self.phone): info['phone'] = self.phone #info['phone'] = '*99#' self.makeWvDialConf(info) self.taskManager.next() @@ -707,25 +863,29 @@ class ModemManager(Screen): pin = params.get('pin') idxInit = 1 + if isEmpty(phone): phone = '*99#' + if isEmpty(uid): uid = 'USER' + if isEmpty(pwd): pwd = 'PASSWORD' + self.writeConf('','>') self.writeConf('[Dialer Defaults]') - if modem is None or init is None or baud is None: + if isEmpty(modem) or isEmpty(init) or isEmpty(baud): return False self.writeConf('Modem = %s' % (modem)) self.writeConf('Baud = %s' % (baud)) self.writeConf('Dial Command = ATDT') self.writeConf('Init%d = ATZ' % (idxInit)) idxInit = idxInit + 1 - if pin is not None: - writeConf('Init%d = AT+CPIN=%s' % (init_idx, pin)) + if not isEmpty(pin): + self.writeConf('Init%d = AT+CPIN=%s' % (idxInit, pin)) idxInit = idxInit + 1 self.writeConf('Init%d = %s' % (idxInit, init)) idxInit = idxInit + 1 - if apn is None and uid is None and pwd is None and pin is None: + if isEmpty(apn) and isEmpty(uid) and isEmpty(pwd) and isEmpty(pin): self.writeConf('Init%d = AT&F' % (idxInit)) idxInit = idxInit + 1 - if apn is not None: + if not isEmpty(apn): self.writeConf('Init%d = AT+CGDCONT=1,"IP","%s"' % (idxInit, apn)) idxInit = idxInit + 1 self.writeConf('Init%d = AT+CFUN = 1' % (idxInit)) @@ -740,6 +900,8 @@ class ModemManager(Screen): self.writeConf('Check DNS = 1') self.writeConf('Check Def Route = 1') self.writeConf('Auto DNS = 1') + if debug_mode_modem_mgr: + printDebugModemMgr(file('/etc/wvdial.conf').read()) def isConnected(self): return len(os.popen('ifconfig -a | grep ppp').read().strip()) > 0 @@ -747,15 +909,21 @@ class ModemManager(Screen): def updateUSBInfo(self): info = ' ' try: + apn,uid,pwd,pin,phone = self.apn,self.uid,self.pwd,self.pin,self.phone + if apn is None: apn = "" + if uid is None: uid = "" + if pwd is None: pwd = "" + if pin is None: pin = "" + if phone is None: phone = "" x = self["menulist"].getCurrent()[1] info = 'Vendor : %s/%s\nAPN : %s\nUser : %s\nPassword : %s\nPin : %s\nPhone : %s' % ( x.get("Vendor"), x.get("ProdID"), - str(self.apn), - str(self.uid), - str(self.pwd), - str(self.pin), - str(self.phone) + apn, + uid, + pwd, + pin, + phone ) except: pass self['usbinfo'].setText(info) -- 2.7.4