def menu_item_highlight(menu_item): global menu_item_highlighted oled.oleds_system_use(True) menu_item_write(menu_item_highlighted) menu_item_highlighted = menu_item menu_item_write(menu_item_highlighted, highlighted=True) oled.oleds_show() oled.oleds_system_use(False)
def menu_item_select(menu_item): global menu_item_selected oled.oleds_system_use(True) menu_item_write(menu_item_selected) menu_item_selected = menu_item menu_item_write(menu_item_selected, selected=True) oled.oleds_show() oled.oleds_system_use(False)
def system_features_menu(): oled.oleds_system_use(True) aiko.button.add_slider_handler(slider_handler, 12, 15) oled.set_system_title(save=True) oled.oleds_clear(write=False) menu_show() menu_item_select(0) oled.oleds_system_use(False)
def console_log_feature(): oled.oleds_system_use(True) oled.oleds_show_log() oled.oleds_system_use(False)
def hugs_feature(): oled.oleds_system_use(True) oled.oleds_show_log(hugs_message) oled.oleds_system_use(False)
def upgrade_thread(): global in_progress global file_count, manifest_checksum, manifest_size, manifest_url, version try: oled.oleds_system_use(True) oled.oleds_log("Firmware upgrade start") gc.collect() manifest_pathname = "manifest" shutil.path_remove(manifest_pathname) # TODO: Remove all "*_new" and "*_old" aiko.web_client.http_get_file(manifest_url, manifest_pathname) # TODO: Verify "manifest_pathname" actual file size versus "manifest_size" # TODO: Verify "manifest_pathname" checksum top_level_files = [] url_prefix = manifest_url.rpartition("/")[0] with open(manifest_pathname, "r") as manifest_file: file_index = 0 for line in manifest_file.readlines(): file_index += 1 file_checksum, file_size, filepath = line.split() url_suffix = filepath.partition("/")[-1] file_url = "/".join([url_prefix, url_suffix]) pathname = url_suffix.partition("/") if not pathname[0] in top_level_files: top_level_files.append(pathname[0]) pathname = "".join([pathname[0] + "_new"] + list(pathname[1:])) print(file_url + " --> " + pathname) oled.oleds_log("Firmware get ... %d of %d" % (file_index, file_count)) aiko.web_client.http_get_file(file_url, pathname) # TODO: Verify actual file size versus size stated in the "manifest" # TODO: Verify actual file checksum shutil.path_remove(manifest_pathname) shutil.file_copy("configuration/net.py", "configuration_new/net.py") shutil.file_copy("configuration/keys.db", "configuration_new/keys.db") oled.oleds_log("Firmware install") for file in top_level_files: try: print("Rename %s to %s" % (file + "_new", file)) shutil.path_remove(file) os.rename(file + "_new", file) except OSError: print("OSError") oled.oleds_log("Firmware upgrade success !") oled.oleds_log("Please reboot :)") except Exception as exception: oled.oleds_log("Firmware upgrade failed :(") import sys sys.print_exception(exception) finally: oled.oleds_system_use(False) in_progress = False version = None