sc7-default-firmware/menudemo.py

80 lines
2.7 KiB
Python

import joystick
from menu import * # bad habit but makes our menu definition nice
from vos_state import vos_state
import blinker
import vectoros
import colors
import gc
# run the sketch demo
def runsketch(arg):
vos_state.show_menu=False # get the menu of the way
vectoros.launch_task('sketch')
return EXIT
def gfxdemo(arg):
vos_state.show_menu=False # get the menu of the way
vectoros.launch_task('screen') # launch
return EXIT
def testdemo(arg):
import tester2
vectoros.vectoros_shutdown()
tester2.main() # this never returns but it does reboot
# the main vector scope demo
def run_demo(arg):
vos_state.show_menu=False
vectoros.launch_task('demo')
# we never come back
return EXIT
def reboot(arg):
if arg==False:
vectoros.reset()
else:
vectoros.soft_reset()
# handle slots
def abcd(key):
if vos_state.show_menu:
vos_debug.debug_print(vos_debug.DEBUG_LEVEL_INFO,f"Menu key {key}")
kdict={ keyleds.KEY_A: 'A', keyleds.KEY_B: 'B', keyleds.KEY_C: 'C', keyleds.KEY_D: 'D'}
await vectoros.launch_vecslot("slot"+kdict[key])
# I really didn't want this to be async but it seems like do_menu must have an await
# and run rarely returns when you have a lot going on
async def vos_main():
# you do NOT have to use with here
# but if you don't you have to worry about the menu controller's joystick instance going out of scope yourself
# or just make everything global -- the menu is smart enough to not listen to events when it is not active
# note: m_back and m_exit were imported from menu
while True: # since this is the main menu, we don't really every quit
print("creating slotkey")
slotkey=keyboardcb.KeyboardCB(abcd,keyleds.KEY_ABCD)
with Menu(clear_after=True,fg_color=colors.PHOSPHOR_DARK,bg_color=colors.PHOSPHOR_BG,
cursor_bg=colors.PHOSPHOR_BG, cursor_fg=colors.PHOSPHOR_BRIGHT) as amenu:
# submenu=[["Test", testdemo, 0],["Previous",m_back,None],["Abort",m_exit,None],["Reset CPU",reboot,False]]
mainmenu=[["Demo",run_demo,None],["Sketch", runsketch, 0],["GFX",gfxdemo,0 ] ]
# ["Test Menu",SUBMENU,submenu]]
# comment next line for default font
amenu.set_font("*") # set default vector font
#amenu.set_callback(menu_custom)
await amenu.do_menu(mainmenu)
# screen.text(40,80,"menu done")
vos_debug.debug_print(vos_debug.DEBUG_LEVEL_INFO,f"Menu waiting {vos_state.show_menu}")
while vos_state.show_menu==False: # wait until we have to be seen again
await asyncio.sleep_ms(0)
def main():
asyncio.run(vos_main())
# this never runs
if __name__=="__main__":
import vectoros
vectoros.run()