mirror of git://git.sysmocom.de/ofono
189 lines
4.9 KiB
Python
Executable File
189 lines
4.9 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
import dbus
|
|
import dbus.mainloop.glib
|
|
import sys
|
|
import gobject
|
|
import os
|
|
|
|
def print_menu():
|
|
print "Select test case"
|
|
print "----------------------------------------------------------------"
|
|
print "[0] Activate cbs"
|
|
print "[1] Deactivate cbs"
|
|
print "[2] Get cbs properties"
|
|
print "[3] Set/Register topics"
|
|
print " If several - give topics separated with comma. \
|
|
\n E.g. 20,50-51,60"
|
|
print "[4] Clear/Unregister topics"
|
|
print "[5] NetReg Base Station - Get current serving cell"
|
|
print "[x] Exit"
|
|
print "----------------------------------------------------------------"
|
|
|
|
def property_changed(property, value):
|
|
if value == "" and property == "Topics":
|
|
print "User selected Topics have been cleared. \
|
|
\nRegistered for emergency topics only."
|
|
else:
|
|
print "Cell Broadcast property %s is changed to %s" % (property, value)
|
|
print "\nPress ENTER to continue"
|
|
|
|
def incoming_broadcast(text, topic):
|
|
print "Broadcast msg: %s \n Topic channel: %s" % (text, topic)
|
|
print "\nPress ENTER to continue"
|
|
|
|
def emergency_broadcast(text, properties):
|
|
emergType = properties["EmergencyType"]
|
|
emergAlert = properties["EmergencyAlert"]
|
|
|
|
print "Broadcast msg: %s \n\t Type: %s \n\t Alert: %s \n\t Popup: %s" \
|
|
% (text, emergType, emergAlert, popup)
|
|
|
|
if properties["Popup"] == True:
|
|
print "Popup required."
|
|
|
|
print "\nPress ENTER to continue"
|
|
|
|
def set_cbs_state(cbs, state):
|
|
if state == True:
|
|
print "Activating cell broadcast..."
|
|
cbs.SetProperty("Powered", dbus.Boolean(1))
|
|
else:
|
|
print "Deactivating cell broadcast..."
|
|
cbs.SetProperty("Powered", dbus.Boolean(0))
|
|
print "-----------------------------------------------------------"
|
|
|
|
def print_cbs_properties(cbs):
|
|
properties = cbs.GetProperties()
|
|
print "---------------------PROPERTIES----------------------------"
|
|
for p in properties:
|
|
if len(properties[p].__str__()) > 0:
|
|
if p == "Powered":
|
|
if properties[p] == True:
|
|
print "Cell Broadcast is Activated."
|
|
else:
|
|
print "Cell Broadcast is Deactivated."
|
|
elif p == "Topics":
|
|
print "Currently set CBS %s are: %s" \
|
|
% (p, properties[p])
|
|
topics_available = True
|
|
else:
|
|
print "Cell Broadcast %s value empty" % (p)
|
|
print "-----------------------------------------------------------"
|
|
|
|
def set_topics(cbs):
|
|
print_cbs_properties(cbs)
|
|
|
|
topicTemp = ""
|
|
invalidData = False;
|
|
index = 0
|
|
|
|
topics = raw_input('Enter the topic ID(s) you want to register to: ')
|
|
|
|
while index < len(topics):
|
|
if topics[index] == ',' or topics[index] == '-':
|
|
topicTemp = ""
|
|
elif topics[index] >= '0' and topics[index] <= '9':
|
|
topicTemp = topicTemp + topics[index]
|
|
else:
|
|
print "Invalid char. \"%s\" entered. Topic not set." \
|
|
% (topics[index])
|
|
invalidData = True
|
|
break
|
|
|
|
if topicTemp:
|
|
if int(topicTemp) > 999:
|
|
invalidData = True
|
|
print "Invalid Topic ID %s (range 0-999). \
|
|
\nCould not register." % topicTemp
|
|
|
|
index = index + 1
|
|
|
|
if invalidData == False:
|
|
try:
|
|
print "Setting Cell Broadcast topics..."
|
|
cbs.SetProperty("Topics", topics);
|
|
except dbus.DBusException, e:
|
|
print "Unable to set topic: ", e
|
|
|
|
print "-----------------------------------------------------------"
|
|
|
|
def get_serving_cell_name(netReg):
|
|
wasFound = False;
|
|
properties = netReg.GetProperties()
|
|
|
|
for p in properties:
|
|
if p == "BaseStation":
|
|
if len(properties[p].__str__()) > 0:
|
|
print "Current serving cell name: %s" \
|
|
% (properties["BaseStation"])
|
|
wasFound = True;
|
|
else:
|
|
print "Current Serving cell name empty. \
|
|
Base Station CBS not available."
|
|
|
|
if wasFound == False:
|
|
print "Base Station parameter not found. \
|
|
\nBase Station CBS not available."
|
|
print "-----------------------------------------------------------"
|
|
|
|
def stdin_handler(fd, condition, cbs, netReg):
|
|
in_key = os.read(fd.fileno(), 160).rstrip()
|
|
|
|
if in_key == '0':
|
|
set_cbs_state(cbs, True)
|
|
|
|
elif in_key == '1':
|
|
set_cbs_state(cbs, False)
|
|
|
|
elif in_key == '2':
|
|
print_cbs_properties(cbs)
|
|
|
|
elif in_key == '3':
|
|
set_topics(cbs)
|
|
|
|
elif in_key == '4':
|
|
cbs.SetProperty("Topics", "")
|
|
|
|
elif in_key == '5':
|
|
get_serving_cell_name(netReg)
|
|
|
|
elif in_key == 'x':
|
|
sys.exit(1)
|
|
|
|
print '\n' * 2
|
|
print_menu()
|
|
|
|
return True
|
|
|
|
if __name__ == "__main__":
|
|
|
|
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
|
|
bus = dbus.SystemBus()
|
|
|
|
manager = dbus.Interface(bus.get_object('org.ofono', '/'),
|
|
'org.ofono.Manager')
|
|
|
|
modems = manager.GetModems()
|
|
path = modems[0][0]
|
|
|
|
cbs = dbus.Interface(bus.get_object('org.ofono', path),
|
|
'org.ofono.CellBroadcast')
|
|
|
|
netReg = dbus.Interface(bus.get_object('org.ofono', path),
|
|
'org.ofono.NetworkRegistration')
|
|
|
|
cbs.connect_to_signal("PropertyChanged", property_changed)
|
|
cbs.connect_to_signal("IncomingBroadcast", incoming_broadcast)
|
|
cbs.connect_to_signal("EmergencyBroadcast", emergency_broadcast)
|
|
|
|
print '\n' * 2
|
|
|
|
print_menu()
|
|
|
|
gobject.io_add_watch(sys.stdin, gobject.IO_IN, stdin_handler, cbs, \
|
|
netReg)
|
|
|
|
mainloop = gobject.MainLoop()
|
|
mainloop.run()
|