Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
card10
firmware
Commits
23250a8e
Commit
23250a8e
authored
Oct 18, 2019
by
dx
Browse files
Merge 'Improve main menu'
See merge request
card10/firmware!346
parents
3010d8eb
a6876823
Pipeline
#4167
passed with stages
in 50 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
preload/menu.py
View file @
23250a8e
...
...
@@ -5,6 +5,7 @@ You can customize this script however you want :) If you want to go back to
the default version, just delete this file; the firmware will recreate it on
next run.
"""
import
buttons
import
collections
import
color
import
display
...
...
@@ -16,17 +17,32 @@ import utime
App
=
collections
.
namedtuple
(
"App"
,
[
"name"
,
"path"
])
# Favorite apps which are shown at the very top of the app list
FAVORITE_APPS
=
[
"personal_state"
,
"ecg"
]
def
enumerate_apps
():
"""List all installed apps."""
def
enumerate_entries
():
for
f
in
os
.
listdir
(
"/"
):
if
f
==
"main.py"
:
yield
App
(
"Home"
,
f
)
for
app
in
sorted
(
os
.
listdir
(
"/apps"
)):
yield
App
(
"USB Storage"
,
"USB_STORAGE_FLAG"
)
yield
from
enumerate_apps
(
FAVORITE_APPS
)
yield
from
sorted
(
enumerate_apps
(),
key
=
lambda
b
:
b
.
name
.
lower
())
def
enumerate_apps
(
apps
=
None
):
"""List all installed apps."""
for
app
in
apps
or
os
.
listdir
(
"/apps"
):
if
app
.
startswith
(
"."
):
continue
# Skip special apps when enumerating from filesystem
if
apps
is
None
and
app
in
FAVORITE_APPS
:
continue
if
app
.
endswith
(
".py"
)
or
app
.
endswith
(
".elf"
):
yield
App
(
app
,
"/apps/"
+
app
)
continue
...
...
@@ -43,6 +59,25 @@ def enumerate_apps():
sys
.
print_exception
(
e
)
def
usb_mode
(
disp
):
os
.
usbconfig
(
os
.
USB_FLASH
)
disp
.
clear
(
color
.
CAMPGREEN
)
disp
.
print
(
"USB Storage"
,
posx
=
3
,
posy
=
20
,
fg
=
color
.
CAMPGREEN_DARK
)
disp
.
print
(
"open"
,
posx
=
52
,
posy
=
40
,
fg
=
color
.
CAMPGREEN_DARK
)
disp
.
update
()
# Wait for select button to be released
while
buttons
.
read
(
0xFF
)
==
buttons
.
TOP_RIGHT
:
pass
# Wait for any button to be pressed and disable USB storage again
while
buttons
.
read
(
0xFF
)
==
0
:
pass
os
.
usbconfig
(
os
.
USB_SERIAL
)
class
MainMenu
(
simple_menu
.
Menu
):
timeout
=
30.0
...
...
@@ -52,6 +87,10 @@ class MainMenu(simple_menu.Menu):
def
on_select
(
self
,
app
,
index
):
self
.
disp
.
clear
().
update
()
try
:
if
app
.
path
==
"USB_STORAGE_FLAG"
:
usb_mode
(
self
.
disp
)
return
print
(
"Trying to load "
+
app
.
path
)
os
.
exec
(
app
.
path
)
except
OSError
as
e
:
...
...
@@ -70,6 +109,14 @@ class MainMenu(simple_menu.Menu):
pass
def
loading_message
():
with
display
.
open
()
as
disp
:
disp
.
clear
(
color
.
CHAOSBLUE
)
disp
.
print
(
"Loading"
,
posx
=
31
,
posy
=
20
)
disp
.
print
(
"menu ..."
,
posx
=
24
,
posy
=
40
)
disp
.
update
()
def
no_apps_message
():
"""Display a warning if no apps are installed."""
with
display
.
open
()
as
disp
:
...
...
@@ -87,8 +134,10 @@ def no_apps_message():
if
__name__
==
"__main__"
:
loading_message
()
try
:
apps
=
list
(
enumerate_
app
s
())
apps
=
list
(
enumerate_
entrie
s
())
except
OSError
:
apps
=
[]
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment