From 89bb4723646f7bdad952fa4d7d4e954161492203 Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Sat, 7 Mar 2026 23:50:35 +0100 Subject: [PATCH] cellular: First version, shows operator name and registration state --- .../META-INF/MANIFEST.JSON | 24 ++++ .../apps/cz.ucw.pavel.cellular/assets/main.py | 103 ++++++++++++++++++ .../res/mipmap-mdpi/icon_64x64.png | Bin 0 -> 6765 bytes 3 files changed, 127 insertions(+) create mode 100644 internal_filesystem/apps/cz.ucw.pavel.cellular/META-INF/MANIFEST.JSON create mode 100644 internal_filesystem/apps/cz.ucw.pavel.cellular/assets/main.py create mode 100644 internal_filesystem/apps/cz.ucw.pavel.cellular/res/mipmap-mdpi/icon_64x64.png diff --git a/internal_filesystem/apps/cz.ucw.pavel.cellular/META-INF/MANIFEST.JSON b/internal_filesystem/apps/cz.ucw.pavel.cellular/META-INF/MANIFEST.JSON new file mode 100644 index 00000000..9e6b0742 --- /dev/null +++ b/internal_filesystem/apps/cz.ucw.pavel.cellular/META-INF/MANIFEST.JSON @@ -0,0 +1,24 @@ +{ +"name": "Xxx", +"publisher": "Pavel Machek", +"short_description": "Xxx", +"long_description": "Simple xxx app.", +"icon_url": "https://apps.micropythonos.com/apps/cz.ucw.pavel.xxx/icons/cz.ucw.pavel.xxx_0.0.1_64x64.png", +"download_url": "https://apps.micropythonos.com/apps/cz.ucw.pavel.xxx/mpks/cz.ucw.pavel.xxx_0.0.1.mpk", +"fullname": "cz.ucw.pavel.xxx", +"version": "0.0.1", +"category": "utilities", +"activities": [ + { + "entrypoint": "assets/main.py", + "classname": "Main", + "intent_filters": [ + { + "action": "main", + "category": "launcher" + } + ] + } + ] +} + diff --git a/internal_filesystem/apps/cz.ucw.pavel.cellular/assets/main.py b/internal_filesystem/apps/cz.ucw.pavel.cellular/assets/main.py new file mode 100644 index 00000000..dcd5dcdd --- /dev/null +++ b/internal_filesystem/apps/cz.ucw.pavel.cellular/assets/main.py @@ -0,0 +1,103 @@ +from mpos import Activity + +""" + +""" + +import time +import os +import json + +try: + import lvgl as lv +except ImportError: + pass + +from mpos import Activity, MposKeyboard + +TMP = "/tmp/cmd.json" + + +def run_cmd_json(cmd): + rc = os.system(cmd + " > " + TMP) + if rc != 0: + raise RuntimeError("command failed") + + with open(TMP, "r") as f: + data = f.read().strip() + + return json.loads(data) + +def dbus_json(cmd): + return run_cmd_json("sudo /home/mobian/g/MicroPythonOS/phone.py " + cmd) + +class CellularManager: + def init(self): + v = dbus_json("loc_on") + + def poll(self): + v = dbus_json("signal") + print(v) + self.signal = v + +cm = CellularManager() + +# ------------------------------------------------------------ +# +# ------------------------------------------------------------ + +class Main(Activity): + + def __init__(self): + super().__init__() + + # -------------------- + + def onCreate(self): + self.screen = lv.obj() + #self.screen.remove_flag(lv.obj.FLAG.SCROLLABLE) + + # Top labels + self.lbl_time = lv.label(self.screen) + self.lbl_time.set_style_text_font(lv.font_montserrat_24, 0) + self.lbl_time.set_text("Startup...") + self.lbl_time.align(lv.ALIGN.TOP_LEFT, 6, 22) + + self.lbl_date = lv.label(self.screen) + self.lbl_date.align(lv.ALIGN.TOP_LEFT, 6, 48) + + self.lbl_month = lv.label(self.screen) + self.lbl_month.align(lv.ALIGN.TOP_RIGHT, -6, 10) + + self.setContentView(self.screen) + cm.init() + + def onResume(self, screen): + self.timer = lv.timer_create(self.tick, 3000, None) + self.tick(0) + + def onPause(self, screen): + if self.timer: + self.timer.delete() + self.timer = None + + # -------------------- + + def tick(self, t): + now = time.localtime() + y, m, d = now[0], now[1], now[2] + hh, mm, ss = now[3], now[4], now[5] + + cm.poll() + s = "\n" + s += cm.signal["OperatorName"] + "\n" + s += "RegistrationState %d\n" % cm.signal["RegistrationState"] + s += "State %d\n" % cm.signal["State"] + + self.lbl_time.set_text("%02d:%02d" % (hh, mm)) + self.lbl_date.set_text("%04d-%02d-%02d %s" % (y, m, d, s)) + + + # -------------------- + + diff --git a/internal_filesystem/apps/cz.ucw.pavel.cellular/res/mipmap-mdpi/icon_64x64.png b/internal_filesystem/apps/cz.ucw.pavel.cellular/res/mipmap-mdpi/icon_64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..316c5f2366bdcab259ac9fb75ce7c3db1dfc4c65 GIT binary patch literal 6765 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