def check_o2_balance(): """Check o2 balance""" ser = serial.Serial(find_device()) code = "*#10#" data="AT+CUSD=1,%s,15" % pdu.pack7bit(code)[1].encode('hex').upper() ser.write(data + "\r") start = int(os.times()[4]) while start + 10 > int(os.times()[4]): line = ser.readline().replace('"',"") if "+CUSD:" in line: response = line.split(",")[1] result = gsm0338().decode(pdu.unpack7bit(response.decode('hex')))[0] result = result[:-1].replace(u'Your balance is \xa3','') logging.debug("Balance is %s" %result) return float(result) return -1
def check_o2_balance(): """Check o2 balance""" ser = serial.Serial(find_device()) code = "*#10#" data = "AT+CUSD=1,%s,15" % pdu.pack7bit(code)[1].encode('hex').upper() ser.write(data + "\r") start = int(os.times()[4]) while start + 10 > int(os.times()[4]): line = ser.readline().replace('"', "") if "+CUSD:" in line: response = line.split(",")[1] result = gsm0338().decode(pdu.unpack7bit( response.decode('hex')))[0] result = result[:-1].replace(u'Your balance is \xa3', '') logging.debug("Balance is %s" % result) return float(result) return -1
def test_gsm_encode(self): c = smspdu.gsm0338() self.assertEquals(c.encode('hello'), 'hello') self.assertEquals(c.encode(u'\u20AC'), '\x1b\x65') self.assertRaises(UnicodeError, c.encode, u'\u20AD')
def test_gsm_encode(self): c = smspdu.gsm0338() self.assertEqual(c.encode('hello'), b'hello') self.assertEqual(c.encode('\u20AC'), b'\x1b\x65') self.assertRaises(UnicodeError, c.encode, '\u20AD')
def main(): global modemport, modem_fh, timeout_for_answer, pin global use_cleartext, cancel_ussd_session, debug global expect, expect_logfilename, ussd_queries global modem_lockfile, saved_stty_value, gsm_codec # Set up signal handler for INT (Ctrl-C) and TERM signal.signal(signal.SIGINT, clean_exit) signal.signal(signal.SIGTERM, clean_exit) # Parse options and react to them parser = create_cmd_line_parser() parsed = parser.parse_args() if parsed.modem != None: modemport = parsed.modem if parsed.timeout: timeout_for_answer = parsed.timeout if parsed.pin != None: pin = parsed.pin if parsed.cleartext: use_cleartext = True if parsed.no_cleartext: use_cleartext = False if parsed.cancel: cancel_ussd_session = True if parsed.debug: debug = True if parsed.logfile != None: expect_logfilename = parsed.logfile loglevel = logging.DEBUG if debug else logging.INFO logging.basicConfig(level=loglevel) # Further arguments are USSD queries if parsed.ussd_queries: ussd_queries = parsed.ussd_queries logging.debug("Start, Version %s, Args: %s", VERSION, all_args) gsm_codec = smspdu.gsm0338() check_modemport(modemport) # Obtain exclusive access to modem modem_lockfile = lock_modemport(modemport) if not modem_lockfile: logging.error("Can't get lock file for %s!\n" + "* Wrong modem device? (use -m <dev>)?\n" + "* Stale lock file for %s in /var/lock?", modemport, modemport) sys.exit(exit_error) # Locking succeeded, so set up exit hook atexit.register(clean_up) logging.debug("Opening modem") try: modem_fh = serial.serial_for_url(modemport, timeout=timeout_for_answer) except serial.SerialException as exc: logging.error("Modem port %s could not be opened: %s", modemport, exc) sys.exit(exit_error) saved_stty_value = save_serial_opts(modem_fh) set_serial_opts(modem_fh) logging.debug("Initialising Expect") expect_logfile = None if expect_logfilename: expect_logfile = open(expect_logfilename, 'a') expect = pexpect.fdpexpect.fdspawn(modem_fh.fileno(), logfile=expect_logfile) expect_setup() set_modem_echo(True) modem_model = get_modem_model() if modem_model == None: modem_model = '' if use_cleartext == None: if modem_needs_pdu_format(modem_model): logging.debug("Modem type \"%s\" needs PDU format for " + "USSD query.", modem_model) use_cleartext = False else: logging.debug("Modem type \"%s\" needs cleartext " + "for USSD query.", modem_model) use_cleartext = True if pin_needed(): logging.debug("PIN needed") if pin == None: logging.error("SIM card is locked, but no PIN to unlock " + "given.\nUse \"-p <pin>\"!\n") sys.exit(exit_nopin) if enter_pin(pin): logging.debug("Pin %s accepted.", pin) else: logging.error("SIM card is locked, PIN %s not accepted!\n" + "Start me again with the correct PIN!\n", pin) sys.exit(exit_wrongpin) net_is_available, reason = get_net_registration_state( num_net_reg_retries) if not net_is_available: logging.error("Sorry, no network seems to be available:\n%s\n", reason) sys.exit(exit_nonet) if cancel_ussd_session: cancel_result = try_cancel_ussd_session() if cancel_result['ok']: print(cancel_result['msg']) else: sys.stderr.write(cancel_result['msg'] + "\n") else: for ussd_query in ussd_queries: if not is_valid_ussd_query(ussd_query): sys.stderr.write(("\"{0}\" is not a valid USSD " + "query - ignored.\n").format(ussd_query)) continue ussd_result = do_ussd_query(ussd_query) if ussd_result['ok']: print(ussd_result['msg']) else: sys.stderr.write(ussd_result['msg'] + "\n") logging.debug("Shutting down") sys.exit(exit_success) # will give control to clean_up