ofono/test/test-cbs

190 lines
5.0 KiB
Python
Executable File

#!/usr/bin/python3
import dbus
import dbus.mainloop.glib
import sys
from gi.repository import GLib
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 = 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 as e:
print("Unable to set topic: %s" % 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(channel, condition, cbs, netReg):
in_key = os.read(channel.unix_get_fd(), 160).rstrip().decode('UTF-8')
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()
GLib.io_add_watch(GLib.IOChannel(filedes=sys.stdin.fileno()),
GLib.PRIORITY_DEFAULT, GLib.IO_IN, stdin_handler, cbs, \
netReg)
mainloop = GLib.MainLoop()
mainloop.run()