You've already forked MicroPythonOS
mirror of
https://github.com/m5stack/MicroPythonOS.git
synced 2026-05-20 11:51:27 -07:00
About app: refactor more DRY
This commit is contained in:
@@ -5,6 +5,26 @@ import sys
|
||||
|
||||
class About(Activity):
|
||||
|
||||
def _add_label(self, parent, text):
|
||||
"""Helper to create and add a label with text."""
|
||||
label = lv.label(parent)
|
||||
label.set_text(text)
|
||||
return label
|
||||
|
||||
def _add_disk_info(self, screen, path):
|
||||
"""Helper to add disk usage info for a given path."""
|
||||
import os
|
||||
try:
|
||||
stat = os.statvfs(path)
|
||||
total_space = stat[0] * stat[2]
|
||||
free_space = stat[0] * stat[3]
|
||||
used_space = total_space - free_space
|
||||
self._add_label(screen, f"Total space {path}: {total_space} bytes")
|
||||
self._add_label(screen, f"Free space {path}: {free_space} bytes")
|
||||
self._add_label(screen, f"Used space {path}: {used_space} bytes")
|
||||
except Exception as e:
|
||||
print(f"About app could not get info on {path} filesystem: {e}")
|
||||
|
||||
def onCreate(self):
|
||||
screen = lv.obj()
|
||||
screen.set_style_border_width(0, 0)
|
||||
@@ -15,20 +35,16 @@ class About(Activity):
|
||||
if focusgroup:
|
||||
focusgroup.add_obj(screen)
|
||||
|
||||
label0 = lv.label(screen)
|
||||
label0.set_text(f"MicroPythonOS version: {mpos.info.CURRENT_OS_VERSION}")
|
||||
label1 = lv.label(screen)
|
||||
label1.set_text(f"Hardware ID: {mpos.info.get_hardware_id()}")
|
||||
label2 = lv.label(screen)
|
||||
label2.set_text(f"sys.version: {sys.version}")
|
||||
label3 = lv.label(screen)
|
||||
label3.set_text(f"sys.implementation: {sys.implementation}")
|
||||
# Basic OS info
|
||||
self._add_label(screen, f"MicroPythonOS version: {mpos.info.CURRENT_OS_VERSION}")
|
||||
self._add_label(screen, f"Hardware ID: {mpos.info.get_hardware_id()}")
|
||||
self._add_label(screen, f"sys.version: {sys.version}")
|
||||
self._add_label(screen, f"sys.implementation: {sys.implementation}")
|
||||
|
||||
# MPY version info
|
||||
sys_mpy = sys.implementation._mpy
|
||||
label30 = lv.label(screen)
|
||||
label30.set_text(f'mpy version: {sys_mpy & 0xff}')
|
||||
label31 = lv.label(screen)
|
||||
label31.set_text(f'mpy sub-version: {sys_mpy >> 8 & 3}')
|
||||
self._add_label(screen, f'mpy version: {sys_mpy & 0xff}')
|
||||
self._add_label(screen, f'mpy sub-version: {sys_mpy >> 8 & 3}')
|
||||
arch = [None, 'x86', 'x64',
|
||||
'armv6', 'armv6m', 'armv7m', 'armv7em', 'armv7emsp', 'armv7emdp',
|
||||
'xtensa', 'xtensawin', 'rv32imc', 'rv64imc'][(sys_mpy >> 10) & 0x0F]
|
||||
@@ -38,62 +54,51 @@ class About(Activity):
|
||||
if (sys_mpy >> 16) != 0:
|
||||
flags += ' -march-flags=' + (sys_mpy >> 16)
|
||||
if len(flags) > 0:
|
||||
label32 = lv.label(screen)
|
||||
label32.set_text('mpy flags: ' + flags)
|
||||
self._add_label(screen, 'mpy flags: ' + flags)
|
||||
|
||||
label4 = lv.label(screen)
|
||||
label4.set_text(f"sys.platform: {sys.platform}")
|
||||
label15 = lv.label(screen)
|
||||
label15.set_text(f"sys.path: {sys.path}")
|
||||
# Platform info
|
||||
self._add_label(screen, f"sys.platform: {sys.platform}")
|
||||
self._add_label(screen, f"sys.path: {sys.path}")
|
||||
|
||||
# MicroPython and memory info
|
||||
import micropython
|
||||
label16 = lv.label(screen)
|
||||
label16.set_text(f"micropython.opt_level(): {micropython.opt_level()}")
|
||||
self._add_label(screen, f"micropython.opt_level(): {micropython.opt_level()}")
|
||||
import gc
|
||||
label17 = lv.label(screen)
|
||||
label17.set_text(f"Memory: {gc.mem_free()} free, {gc.mem_alloc()} allocated, {gc.mem_alloc()+gc.mem_free()} total")
|
||||
self._add_label(screen, f"Memory: {gc.mem_free()} free, {gc.mem_alloc()} allocated, {gc.mem_alloc()+gc.mem_free()} total")
|
||||
# These are always written to sys.stdout
|
||||
#label16.set_text(f"micropython.mem_info(): {micropython.mem_info()}")
|
||||
#label18 = lv.label(screen)
|
||||
#label18.set_text(f"micropython.qstr_info(): {micropython.qstr_info()}")
|
||||
label19 = lv.label(screen)
|
||||
label19.set_text(f"mpos.__path__: {mpos.__path__}") # this will show .frozen if the /lib folder is frozen (prod build)
|
||||
#self._add_label(screen, f"micropython.mem_info(): {micropython.mem_info()}")
|
||||
#self._add_label(screen, f"micropython.qstr_info(): {micropython.qstr_info()}")
|
||||
self._add_label(screen, f"mpos.__path__: {mpos.__path__}") # this will show .frozen if the /lib folder is frozen (prod build)
|
||||
|
||||
# Partition info (ESP32 only)
|
||||
try:
|
||||
from esp32 import Partition
|
||||
label5 = lv.label(screen)
|
||||
label5.set_text("") # otherwise it will show the default "Text" if there's an exception below
|
||||
current = Partition(Partition.RUNNING)
|
||||
label5.set_text(f"Partition.RUNNING: {current}")
|
||||
self._add_label(screen, f"Partition.RUNNING: {current}")
|
||||
next_partition = current.get_next_update()
|
||||
label6 = lv.label(screen)
|
||||
label6.set_text(f"Next update partition: {next_partition}")
|
||||
self._add_label(screen, f"Next update partition: {next_partition}")
|
||||
except Exception as e:
|
||||
print(f"Partition info got exception: {e}")
|
||||
|
||||
# Machine info
|
||||
try:
|
||||
print("Trying to find out additional board info, not available on every platform...")
|
||||
import machine
|
||||
label7 = lv.label(screen)
|
||||
label7.set_text("") # otherwise it will show the default "Text" if there's an exception below
|
||||
label7.set_text(f"machine.freq: {machine.freq()}")
|
||||
label8 = lv.label(screen)
|
||||
label8.set_text(f"machine.unique_id(): {machine.unique_id()}")
|
||||
label9 = lv.label(screen)
|
||||
label9.set_text(f"machine.wake_reason(): {machine.wake_reason()}")
|
||||
label10 = lv.label(screen)
|
||||
label10.set_text(f"machine.reset_cause(): {machine.reset_cause()}")
|
||||
self._add_label(screen, f"machine.freq: {machine.freq()}")
|
||||
self._add_label(screen, f"machine.unique_id(): {machine.unique_id()}")
|
||||
self._add_label(screen, f"machine.wake_reason(): {machine.wake_reason()}")
|
||||
self._add_label(screen, f"machine.reset_cause(): {machine.reset_cause()}")
|
||||
except Exception as e:
|
||||
print(f"Additional board info got exception: {e}")
|
||||
|
||||
# Freezefs info (production builds only)
|
||||
try:
|
||||
print("Trying to find out freezefs info, this only works on production builds...") # dev builds already have the /builtin folder
|
||||
import freezefs_mount_builtin
|
||||
label11 = lv.label(screen)
|
||||
label11.set_text(f"freezefs_mount_builtin.date_frozen: {freezefs_mount_builtin.date_frozen}")
|
||||
label12 = lv.label(screen)
|
||||
label12.set_text(f"freezefs_mount_builtin.files_folders: {freezefs_mount_builtin.files_folders}")
|
||||
label13 = lv.label(screen)
|
||||
label13.set_text(f"freezefs_mount_builtin.sum_size: {freezefs_mount_builtin.sum_size}")
|
||||
label14 = lv.label(screen)
|
||||
label14.set_text(f"freezefs_mount_builtin.version: {freezefs_mount_builtin.version}")
|
||||
self._add_label(screen, f"freezefs_mount_builtin.date_frozen: {freezefs_mount_builtin.date_frozen}")
|
||||
self._add_label(screen, f"freezefs_mount_builtin.files_folders: {freezefs_mount_builtin.files_folders}")
|
||||
self._add_label(screen, f"freezefs_mount_builtin.sum_size: {freezefs_mount_builtin.sum_size}")
|
||||
self._add_label(screen, f"freezefs_mount_builtin.version: {freezefs_mount_builtin.version}")
|
||||
except Exception as e:
|
||||
# This will throw an EEXIST exception if there is already a "/builtin" folder present
|
||||
# It will throw "no module named 'freezefs_mount_builtin'" if there is no frozen filesystem
|
||||
@@ -102,34 +107,10 @@ class About(Activity):
|
||||
# BUT which will still have the frozen-inside /lib folder. So the user will be able to install apps into /builtin
|
||||
# but they will not be able to install libraries into /lib.
|
||||
print("main.py: WARNING: could not import/run freezefs_mount_builtin: ", e)
|
||||
label11 = lv.label(screen)
|
||||
label11.set_text(f"freezefs_mount_builtin exception (normal if internal storage partition has overriding /builtin folder): {e}")
|
||||
# Disk usage:
|
||||
import os
|
||||
try:
|
||||
stat = os.statvfs('/')
|
||||
total_space = stat[0] * stat[2]
|
||||
free_space = stat[0] * stat[3]
|
||||
used_space = total_space - free_space
|
||||
label20 = lv.label(screen)
|
||||
label20.set_text(f"Total space in /: {total_space} bytes")
|
||||
label21 = lv.label(screen)
|
||||
label21.set_text(f"Free space in /: {free_space} bytes")
|
||||
label22 = lv.label(screen)
|
||||
label22.set_text(f"Used space in /: {used_space} bytes")
|
||||
except Exception as e:
|
||||
print(f"About app could not get info on / filesystem: {e}")
|
||||
try:
|
||||
stat = os.statvfs('/sdcard')
|
||||
total_space = stat[0] * stat[2]
|
||||
free_space = stat[0] * stat[3]
|
||||
used_space = total_space - free_space
|
||||
label23 = lv.label(screen)
|
||||
label23.set_text(f"Total space /sdcard: {total_space} bytes")
|
||||
label24 = lv.label(screen)
|
||||
label24.set_text(f"Free space /sdcard: {free_space} bytes")
|
||||
label25 = lv.label(screen)
|
||||
label25.set_text(f"Used space /sdcard: {used_space} bytes")
|
||||
except Exception as e:
|
||||
print(f"About app could not get info on /sdcard filesystem: {e}")
|
||||
self._add_label(screen, f"freezefs_mount_builtin exception (normal if internal storage partition has overriding /builtin folder): {e}")
|
||||
|
||||
# Disk usage info
|
||||
self._add_disk_info(screen, '/')
|
||||
self._add_disk_info(screen, '/sdcard')
|
||||
|
||||
self.setContentView(screen)
|
||||
|
||||
Reference in New Issue
Block a user