Skip to content

Commit f772fc4

Browse files
Add DeviceInfo and VersionInfo frameworks
1 parent b8cc049 commit f772fc4

File tree

10 files changed

+67
-32
lines changed

10 files changed

+67
-32
lines changed

internal_filesystem/builtin/apps/com.micropythonos.about/assets/about.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
from mpos import Activity, DisplayMetrics
1+
from mpos import Activity, DisplayMetrics, BuildInfo, DeviceInfo
22

3-
import mpos.info
43
import sys
54

65
class About(Activity):
@@ -46,8 +45,8 @@ def onCreate(self):
4645

4746
# Basic OS info
4847
self._add_label(screen, f"{lv.SYMBOL.HOME} System Information", is_header=True)
49-
self._add_label(screen, f"MicroPythonOS version: {mpos.info.CURRENT_OS_VERSION}")
50-
self._add_label(screen, f"Hardware ID: {mpos.info.get_hardware_id()}")
48+
self._add_label(screen, f"MicroPythonOS version: {BuildInfo.version.release}")
49+
self._add_label(screen, f"Hardware ID: {DeviceInfo.hardware_id}")
5150
self._add_label(screen, f"sys.version: {sys.version}")
5251
self._add_label(screen, f"sys.implementation: {sys.implementation}")
5352
self._add_label(screen, f"sys.byteorder: {sys.byteorder}")
@@ -83,6 +82,7 @@ def onCreate(self):
8382
# These are always written to sys.stdout
8483
#self._add_label(screen, f"micropython.mem_info(): {micropython.mem_info()}")
8584
#self._add_label(screen, f"micropython.qstr_info(): {micropython.qstr_info()}")
85+
import mpos
8686
self._add_label(screen, f"mpos.__path__: {mpos.__path__}") # this will show .frozen if the /lib folder is frozen (prod build)
8787

8888
# ESP32 hardware info

internal_filesystem/builtin/apps/com.micropythonos.osupdate/assets/osupdate.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
import ujson
33
import time
44

5-
from mpos import Activity, PackageManager, ConnectivityManager, TaskManager, DownloadManager, DisplayMetrics
6-
import mpos.info
5+
from mpos import Activity, PackageManager, ConnectivityManager, TaskManager, DownloadManager, DisplayMetrics, DeviceInfo, BuildInfo
76

87
class OSUpdate(Activity):
98

@@ -47,7 +46,7 @@ def onCreate(self):
4746

4847
self.current_version_label = lv.label(self.main_screen)
4948
self.current_version_label.align(lv.ALIGN.TOP_LEFT,0,0)
50-
self.current_version_label.set_text(f"Installed OS version: {mpos.info.CURRENT_OS_VERSION}")
49+
self.current_version_label.set_text(f"Installed OS version: {BuildInfo.version.release}")
5150
self.force_update = lv.checkbox(self.main_screen)
5251
self.force_update.set_text("Force Update")
5352
self.force_update.add_event_cb(lambda *args: self.force_update_clicked(), lv.EVENT.VALUE_CHANGED, None)
@@ -182,7 +181,7 @@ def _get_user_friendly_error(self, error):
182181
return f"An error occurred:\n{str(error)}\n\nPlease try again."
183182

184183
async def show_update_info(self):
185-
hwid = mpos.info.get_hardware_id()
184+
hwid = DeviceInfo.hardware_id
186185

187186
try:
188187
# Use UpdateChecker to fetch update info
@@ -217,7 +216,7 @@ def handle_update_info(self, version, download_url, changelog):
217216
self.download_update_url = download_url
218217

219218
# Use UpdateChecker to determine if update is available
220-
is_newer = self.update_checker.is_update_available(version, mpos.info.CURRENT_OS_VERSION)
219+
is_newer = self.update_checker.is_update_available(version, BuildInfo.version.release)
221220

222221
if is_newer:
223222
label = "New"

internal_filesystem/lib/mpos/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
from .camera_manager import CameraManager
1515
from .sensor_manager import SensorManager
1616
from .time_zone import TimeZone
17+
from .device_info import DeviceInfo
18+
from .build_info import BuildInfo
1719

1820
# Common activities
1921
from .app.activities.chooser import ChooserActivity
@@ -65,6 +67,8 @@
6567
"SharedPreferences",
6668
"ConnectivityManager", "DownloadManager", "WifiService", "AudioFlinger", "Intent",
6769
"ActivityNavigator", "PackageManager", "TaskManager", "CameraManager",
70+
# Device and build info
71+
"DeviceInfo", "BuildInfo",
6872
# Common activities
6973
"ChooserActivity", "ViewActivity", "ShareActivity",
7074
"SettingActivity", "SettingsActivity", "CameraActivity",

internal_filesystem/lib/mpos/apps.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import _thread
44
import traceback
55

6-
import mpos.info
76
import mpos.ui
87

98
# Run the script in the current thread:
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
"""
2+
BuildInfo - OS version and build information
3+
"""
4+
5+
6+
class BuildInfo:
7+
"""OS version and build information."""
8+
9+
class version:
10+
"""Version information."""
11+
12+
release = "0.7.0" # Human-readable version: "0.7.0"
13+
sdk_int = 0 # API level: 0
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"""
2+
DeviceInfo - Device hardware information
3+
"""
4+
5+
6+
class DeviceInfo:
7+
"""Device hardware information."""
8+
9+
hardware_id = "missing-hardware-info"
10+
11+
@classmethod
12+
def set_hardware_id(cls, device_id):
13+
"""
14+
Set the device/hardware identifier (called during boot).
15+
16+
Args:
17+
device_id: The hardware identifier string
18+
"""
19+
cls.hardware_id = device_id
20+
21+
@classmethod
22+
def get_hardware_id(cls):
23+
"""
24+
Get the hardware identifier.
25+
26+
Returns:
27+
str: The hardware identifier
28+
"""
29+
return cls.hardware_id

internal_filesystem/lib/mpos/info.py

Lines changed: 0 additions & 11 deletions
This file was deleted.

internal_filesystem/lib/mpos/main.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import mpos.ui
77
import mpos.ui.topmenu
88

9-
from mpos import AppearanceManager, DisplayMetrics, PackageManager, SharedPreferences, TaskManager
9+
from mpos import AppearanceManager, DisplayMetrics, PackageManager, SharedPreferences, TaskManager, DeviceInfo
1010

1111
# White text on black logo works (for dark mode) and can be inverted (for light mode)
1212
logo_white = "M:builtin/res/mipmap-mdpi/MicroPythonOS-logo-white-long-w296.png" # from the MPOS-logo repo
@@ -65,8 +65,7 @@ def detect_board():
6565

6666
board = detect_board()
6767
print(f"Initializing {board} hardware")
68-
import mpos.info
69-
mpos.info.set_hardware_id(board)
68+
DeviceInfo.set_hardware_id(board)
7069
__import__(f"mpos.board.{board}")
7170

7271
# Allow LVGL M:/path/to/file or M:relative/path/to/file to work for image set_src etc

tests/test_graphical_about_app.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,16 @@
1818
import unittest
1919
import lvgl as lv
2020
import mpos.apps
21-
import mpos.info
2221
import mpos.ui
2322
import os
2423
from mpos import (
2524
wait_for_render,
2625
capture_screenshot,
2726
find_label_with_text,
2827
verify_text_present,
29-
print_screen_labels
28+
print_screen_labels,
29+
DeviceInfo,
30+
BuildInfo
3031
)
3132

3233

@@ -51,7 +52,7 @@ def setUp(self):
5152
pass # Directory already exists
5253

5354
# Store hardware ID for verification
54-
self.hardware_id = mpos.info.get_hardware_id()
55+
self.hardware_id = DeviceInfo.hardware_id
5556
print(f"Testing with hardware ID: {self.hardware_id}")
5657

5758
def tearDown(self):
@@ -161,7 +162,7 @@ def test_about_app_shows_os_version(self):
161162
)
162163

163164
# Verify the actual version string is present
164-
os_version = mpos.info.CURRENT_OS_VERSION
165+
os_version = BuildInfo.version.release
165166
self.assertTrue(
166167
verify_text_present(screen, os_version),
167168
f"OS version '{os_version}' not found on screen"

tests/test_graphical_osupdate.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
capture_screenshot,
1212
find_label_with_text,
1313
verify_text_present,
14-
print_screen_labels
14+
print_screen_labels,
15+
DeviceInfo,
16+
BuildInfo
1517
)
1618

1719

@@ -148,7 +150,7 @@ def test_current_version_displayed(self):
148150

149151
# Check that it contains the current version
150152
label_text = version_label.get_text()
151-
current_version = mpos.info.CURRENT_OS_VERSION
153+
current_version = BuildInfo.version.release
152154
self.assertIn(current_version, label_text,
153155
f"Current version {current_version} not in label text: {label_text}")
154156

@@ -186,7 +188,7 @@ class TestOSUpdateGraphicalStatusMessages(unittest.TestCase):
186188

187189
def setUp(self):
188190
"""Set up test fixtures."""
189-
self.hardware_id = mpos.info.get_hardware_id()
191+
self.hardware_id = DeviceInfo.hardware_id
190192
self.screenshot_dir = "tests/screenshots"
191193

192194
try:
@@ -243,7 +245,7 @@ class TestOSUpdateGraphicalScreenshots(unittest.TestCase):
243245

244246
def setUp(self):
245247
"""Set up test fixtures."""
246-
self.hardware_id = mpos.info.get_hardware_id()
248+
self.hardware_id = DeviceInfo.hardware_id
247249
self.screenshot_dir = "tests/screenshots"
248250

249251
try:

0 commit comments

Comments
 (0)