def start_recording(quality, bitrate): global recorder global state global menu_timer_id recorder.start(quality, bitrate, VIDEO_LENGTH * 60) # menu hide_menu() # timers Watchdog.clear_timeout(menu_timer_id) state = 'recording'
def redraw_menu(btn): # boooooo global state global menu_timer_id if state != 'menu': show_menu() # timers Watchdog.clear_timeout(menu_timer_id) menu_timer_id = Watchdog.set_timeout(MENU_TIMEOUT, hide_menu) stop_select_propagation = False # first, allow to go up if it's possible and requested if btn == 'up': if menu['level']: menu['level'].pop() # second, go down to the selected item item, prev_item = menu, menu for level in menu['level']: prev_item = item item = item['items'][level] # third, allow to go even lower, if it's possible and requested if btn in ['down', 'select']: if 'items' in item['items'][item['selected']]: menu['level'].append(item['selected']) prev_item = item item = item['items'][item['selected']] stop_select_propagation = True # allow to go through items of this level if btn in ['left', 'right']: if 'left' == btn: delta = -1 if 'right' == btn: delta = +1 item['selected'] = (item['selected'] + delta) % len(item['items']) # prepare item meta to be printed to screen prev_name = '' name = item['items'][item['selected']]['name'] description = item['items'][item['selected']].get('description', '') if not description: if item != prev_item: prev_name = '%s%s' % (lcd.CHAR_ARROW_UP, prev_item['items'][prev_item['selected']]['name']) position = '%s%d/%d%s' % (lcd.CHAR_ARROW_LEFT, item['selected'] + 1, len(item['items']), lcd.CHAR_ARROW_RIGHT) lcd.home() lcd.clear() line1 = '%-16s' % (name, ) line2 = '%-11s%5s' % (description or prev_name, position) lcd.message('%s\n%s' % (line1, line2)) # finally process SELECT if btn == 'select' and not stop_select_propagation: selected_item = item['items'][item['selected']] if 'call' in selected_item: func, args = selected_item['call'], selected_item['args'] func(*args)