import fcntl
import os
import stat
+import dbus
+import gobject
# Needed for correct output of utf-8 symbols.
sys.stdout=file("/dev/stdout", "wb")
"Options:\n-l language. Allowed languages: German, English, Italian, French, Spanish, Dutch, Swedish, Danish, Portuguese, Finnish, Norwegian, Greek, Turkish, Reserved1, Reserved2, Unspecified\n"+\
"-r retry count. 0 default. Use -1 for infinite.\n-f If specified, errors, which occur on last query are threated as fatal\n"+\
"-t timeout in seconds. Default 30. Timeout is considered to be critical error because you can't be sure answer for what request was returned.\n"+\
-"-d delimeter. Default is '\\n> '"+\
+"-d delimeter. Default is '\\n> \n'"+\
+"-m gain modem lock imidiately '"+\
+"-s show GUI message box on last reply"+\
"For USSD menu navigation divide USSD number via spacebars for every next menu selection. Type exit in interactive mode to exit."
sys.exit()
delimiter = "\n> "
language = 15
timeout = 30
+show_qussd = False
if sys.argv[1] == "interactive":
number = "interactive"
print >> sys.stderr, "Syntax error in USSD number."
sys.exit(-7)
+modem = None
+
# Parsing command line options
arg = 1
state = "arg"
if sys.argv[arg] == "-f":
allow_last_error = False
continue
+ if sys.argv[arg] == "-s":
+ show_qussd = True
+ continue
+ if sys.argv[arg] == "-m":
+ modem = init_modem(modem)
+ continue
if state == "lang":
if sys.argv[arg] == "German":
else:
retry_forever = False
-modem = None
+bus = dbus.SystemBus()
+ussdd = bus.get_object("su.kibergus.ussdd", "/su/kibergus/ussdd")
+ussdd_int = dbus.Interface(ussdd, "su.kibergus.ussdd")
# Now we are ready to send commands
sys.stdout.write(delimiter)
sys.stdout.flush()
while number == "interactive" or stage < len(number):
- if modem == None:
- modem = init_modem(modem)
-
if number == "interactive":
cnumber = sys.stdin.readline().strip()
if cnumber == "exit":
- close_modem (modem)
+ if modem != None:
+ close_modem (modem)
sys.exit (0)
if not check_number (cnumber):
sys.stdout.write ("Syntax error in USSD number"+delimiter)
else:
cnumber = number[stage]
+ if modem == None:
+ modem = init_modem(modem)
+
if retry == -1 and not retry_forever:
print >> sys.stderr, "Retry limit is over. Giving up."
break
try :
+ if number != "interactive" and not show_qussd or stage != len(number)-1:
+ ussdd_int.skip_next()
+
modem.send('at+cusd=1,"'+cnumber+'",'+str(language)+'\r')
# Read our query echoed back
modem.readline()
except pexpect.TIMEOUT:
print >> sys.stderr, "Timeout. Modem didn't reply."
close_modem (modem)
+ ussdd_int.show_next()
sys.exit (-2)
if replystring.strip() == "ERROR" :
retry -= 1
print >> sys.stderr, "Modem returned ERROR. Query not executed."
+ ussdd_int.show_next()
continue
try: