def available(update=False, show=False): if update: if not wifi.status(): return badge.nvs_get_u8('badge', 'OTA.ready', 0) info = download_info(show) if info: if info["build"] > version.build: badge.nvs_set_u8('badge', 'OTA.ready', 1) return True badge.nvs_set_u8('badge', 'OTA.ready', 0) return badge.nvs_get_u8('badge', 'OTA.ready', 0)
def available(update=False, show=False): if update: if not wifi.status(): return badge.nvs_get_u8('badge', 'OTA.ready', 0) info = download_info(show) if info: if info["build"] > consts.INFO_FIRMWARE_BUILD: badge.nvs_set_u8('badge', 'OTA.ready', 1) return True badge.nvs_set_u8('badge', 'OTA.ready', 0) return badge.nvs_get_u8('badge', 'OTA.ready', 0)
def pm_task(): ''' The power management task [internal function] ''' global requestedStandbyTime global timeout global disabled if disabled: return timeout idleTime = virtualtimers.idle_time() if idleTime > 30000 and not badge.safe_mode() and not ( usb_attached() and badge.nvs_get_u8('badge', 'usb_stay_awake', 0) != 0): global onSleepCallback if not onSleepCallback == None: print("[Power management] Running onSleepCallback...") try: onSleepCallback(idleTime) except BaseException as e: print("[ERROR] An error occured in the on sleep callback.") sys.print_exception(e) deepsleep.start_sleeping(idleTime) return timeout
def pm_task(): ''' The power management task [internal function] ''' global requestedStandbyTime idleTime = virtualtimers.idle_time() #print("[Power management] Next task wants to run in "+str(idleTime)+" ms.") if idleTime > 30000 and not badge.safe_mode() and not ( usb_attached() and badge.nvs_get_u8('badge', 'usb_stay_awake', 0) != 0): global onSleepCallback if not onSleepCallback == None: print("[Power management] Running onSleepCallback...") try: onSleepCallback(idleTime) except BaseException as e: print("[ERROR] An error occured in the on sleep callback.") sys.print_exception(e) if idleTime >= 86400000: # One day print("[Power management] Sleeping forever...") deepsleep.start_sleeping() else: print("[Power management] Sleeping for " + str(idleTime) + " ms...") deepsleep.start_sleeping(idleTime) global userResponseTime return userResponseTime
def settings_get(key, default=0): try: value = badge.nvs_get_u8(LARSON_NAMESPACE, key, default) print('get', key, value, 'default', default) return value except: return default
def enable(showStatus=True): global failed, state, nw if not state: if not nw.isconnected(): nw.active(True) ssid = badge.nvs_get_str('system', 'wifi.ssid', 'hackerhotel-insecure') password = badge.nvs_get_str('system', 'wifi.password') if showStatus: easydraw.msg("Connecting to '"+ssid+"'...") nw.connect(ssid, password) if password else nw.connect(ssid) timeout = badge.nvs_get_u8('system', 'wifi.timeout', 5) while not nw.isconnected(): time.sleep(1) timeout = timeout - 1 if (timeout<1): if showStatus: easydraw.msg("Error: could not connect!") disable() failed = True return False state = True failed = False if showStatus: easydraw.msg("Connected!") return True
def loop(): global interval, seeded, message, swearing enabled = badge.nvs_get_u8("sweary","enable", 0) if enabled: if not seeded: seed = sum(c << (i*8) for i, c in enumerate(os.urandom(4))) random.seed(seed) seeded = True # Do this here so that we don't choose a new message as soon as we redraw for sleep message = random.choice(swearing); return interval return 9999999999
def loop(): print("> angelshifts loop") last_update = int(badge.nvs_get_str("engel", "update", "0")) print("last update: ", last_update) if api_key: # Perform update if update_interval has passed if last_update + update_interval < easyrtc.time.time(): print("angelshifts: updating...") wifi.init() tries = 0 while not wifi.sta_if.isconnected(): time.sleep(0.1) tries += 1 if tries >= wifi_tries: return wakeup_interval next_shift = get_next_shift(api_key) if next_shift: badge.nvs_set_str("engel", "shift_name", next_shift["name"]) badge.nvs_set_str("engel", "shift_loc", next_shift["Name"]) badge.nvs_set_str("engel", "shift_start", next_shift["start"]) badge.nvs_set_str("engel", "shift_end", next_shift["end"]) badge.nvs_set_u8("engel", "notified", 0) else: badge.nvs_set_str("engel", "shift_name", "") badge.nvs_set_str("engel", "update", str(easyrtc.time.time())) else: print("angelshifts: no update needed") # Notify about upcoming shift if it starts in less than notify_time if badge.nvs_get_str("engel", "shift_name", "") and not bool( badge.nvs_get_u8("engel", "notified")): start = int(badge.nvs_get_str("engel", "shift_start", "")) now = easyrtc.time.time() if start > now and start < now + notify_time: global notified badge.vibrator_init() badge.vibrator_activate(200) ugfx.string( 0, 0, "NEXT SHIFT IN {} MINUTES!".format(notify_time // 60), "PermanentMarker22", ugfx.BLACK) ugfx.flush() return wakeup_interval else: print("no api key set up") return 0
def draw(y, sleep=2): global message enabled = badge.nvs_get_u8("sweary","enable", 0) if enabled and seeded and sleep: nick = badge.nvs_get_str("owner", "name", 'Offensive Owner') ugfx.clear(ugfx.BLACK) ugfx.flush() ugfx.clear(ugfx.WHITE) ugfx.flush() ugfx.string_box(0,10,296,26, nick + " says:", "Roboto_BlackItalic24", ugfx.BLACK, ugfx.justifyLeft) ugfx.string_box(0,45,296,38, message, "PermanentMarker36", ugfx.BLACK, ugfx.justifyCenter) return [interval, 0] return [9999999999, 0]
def asked_nickname(value): if value: badge.nvs_set_str("owner", "name", value) # Do the firstboot magic newState = 1 if badge.nvs_get_u8('badge', 'setup.state', 0) == 0 else 3 badge.nvs_set_u8('badge', 'setup.state', newState) # Show the user that we are done easydraw.msg("Hi " + value + "!", 'Your nick has been stored to flash!') time.sleep(0.5) else: badge.nvs_set_u8('badge', 'setup.state', 2) # Skip the sponsors badge.nvs_set_u8('sponsors', 'shown', 1) appglue.home()
def show(force=False): if (not badge.nvs_get_u8('sponsors', 'shown', 0)) or force: needToInstall = True version = 0 try: with open("/lib/sponsors/version", "r") as f: version = int(f.read(99)) print("[SPONSORS] Current version: "+str(version)) except: print("[SPONSORS] Not installed!") if version>=14: needToInstall = False if needToInstall: install() try: with open("/lib/sponsors/version", "r") as f: version = int(f.read(99)) # Now we know for sure that a version of the sponsors app has been installed badge.nvs_set_u8('sponsors', 'shown', 1) appglue.start_app("sponsors") except: pass
def enable(showStatus=True): global failed global state if not state: nw = network.WLAN(network.STA_IF) if not nw.isconnected(): nw.active(True) ssid = badge.nvs_get_str('badge', 'wifi.ssid', '') password = badge.nvs_get_str('badge', 'wifi.password', '') if showStatus: easydraw.msg("Connecting to '" + ssid + "'...") result = "?" if password: nw.connect(ssid, password) else: nw.connect(ssid) timeout = badge.nvs_get_u8('badge', 'wifi.timeout', 30) show = round(timeout / 5) while not nw.isconnected(): newShow = round(timeout / 5) if show != newShow: easydraw.msg("(" + str(round(timeout / 2)) + " seconds)") show = newShow time.sleep(0.5) timeout = timeout - 1 if (timeout < 1): if showStatus: easydraw.msg("Error: could not connect!") disable() failed = True return False state = True failed = False if showStatus: easydraw.msg("Connected!") return True
def start(): if badge.safe_mode(): splash = 'splash' else: splash = badge.nvs_get_str('boot', 'splash', 'splash') if splash.startswith('bpp '): splash = splash[4:len(splash)] badge.mount_bpp() elif splash.startswith('sdcard '): splash = splash[7:len(splash)] badge.mount_sdcard() __import__(splash) setupState = badge.nvs_get_u8('badge', 'setup.state', 0) if setupState == 0: #First boot print("First boot (start setup)...") __import__("setup") elif setupState == 1: # Second boot: Show sponsors print("Second boot (show sponsors)...") badge.nvs_set_u8('badge', 'setup.state', 2) spoc.show(True) elif setupState == 2: # Third boot: force OTA check print("Third boot (force ota check)...") badge.nvs_set_u8('badge', 'setup.state', 3) if not easywifi.failure(): otac.available(True) start() else: # Normal boot print("Normal boot... (" + str(machine.reset_cause()) + ")")
def enable(): if badge.nvs_get_u8('badge','evrt',0)==0: virtualtimers.new(1, ber_task)
import ugfx, time, badge, machine, deepsleep, gc, appglue, virtualtimers, easydraw, wifi, rtc, term, term_menu, orientation, tasks.powermanagement as pm, uos, json, sys, tasks.otacheck as otacheck # Default values default_logo = '/media/hackerhotel.png' # Read splashscreen configuration from NVS cfg_disabled = badge.nvs_get_u8('splash', 'disabled', False) cfg_term_menu = badge.nvs_get_u8('splash', 'term_menu', True) cfg_wifi = badge.nvs_get_u8('splash', 'wifi', True) cfg_shell = badge.nvs_get_u8('splash', 'shell', False) cfg_services = badge.nvs_get_u8('splash', 'services', True) cfg_logo = badge.nvs_get_str('splash', 'logo', default_logo) cfg_nickname = badge.nvs_get_u8('splash', 'nickname', True) cfg_led_animation = badge.nvs_get_str('splash', 'ledApp', None) # Small hack to install logo if needed try: media = uos.listdir("/media") if not "hackerhotel.png" in media: raise (BaseException("Logo not available")) except: import install_hh_logo # If the user holds down the START button during boot we skip this app and go straight into the launcher if badge.safe_mode() or cfg_disabled: appglue.start_app("launcher", False) # Drop directly into uPython shell if requested if cfg_shell: appglue.start_app("shell", False)
# Home menu application import ugfx, time, badge, machine, gc, system, virtualtimers, easydraw, wifi, rtc, term, term_menu, orientation, tasks.powermanagement as pm, uos, json, sys, tasks.otacheck as otacheck, display # Default values default_logo = '/media/hackerhotel.png' # Read splashscreen configuration from NVS cfg_term_menu = badge.nvs_get_u8('splash', 'term_menu', True) cfg_wifi = badge.nvs_get_u8('splash', 'wifi', True) cfg_services = badge.nvs_get_u8('splash', 'services', True) cfg_logo = badge.nvs_get_str('splash', 'logo', default_logo) cfg_nickname = badge.nvs_get_u8('splash', 'nickname', True) cfg_led_animation = badge.nvs_get_str('splash', 'ledApp', None) # Small hack to install logo if needed try: media = uos.listdir("/media") if not "hackerhotel.png" in media: raise (BaseException("Logo not available")) except: import dashboard.resources.png_hackerhotel try: media = uos.listdir("/media") icons = [ "alert", "bell", "bug", "busy", "charge", "crown", "earth", "flag", "music", "ok", "wifi", "usb" ] for icon in icons: if not icon + ".png" in media:
import badge, easydraw, woezel, wifi lvl = badge.nvs_get_u8('ota', 'fixlvl', 0) if lvl < 3: if not badge.nvs_get_u16("modaudio", "mixer_ctl_0"): badge.nvs_set_u16("modaudio", "mixer_ctl_0", (0 << 15) + (0 << 8) + (1 << 7) + (32 << 0)) badge.nvs_set_u16("modaudio", "mixer_ctl_1", (0 << 15) + (32 << 8) + (0 << 7) + (32 << 0)) badge.nvs_set_u8('ota', 'fixlvl', 3) if lvl < 5: wifi.connect() if wifi.wait(30, True): for bloatware in [ 'event_schedule', 'de_rode_hack', 'hacker_gallery', 'angry_nerds_podcast' ]: # This is ugly, but if 1 app is already up to date we just try to fill the device with the rest try: easydraw.messageCentered("Updating...\n" + bloatware, True, '/media/flag.png') woezel.install(bloatware) except: pass badge.nvs_set_u8('ota', 'fixlvl', 5)
def splash_about_countdown_reset(): global splashAboutCountdown splashAboutCountdown = badge.nvs_get_u8('splash', 'about.amount', 10)
import badge, easydraw, time, appglue easydraw.msg("", "Sweary", True) enabled = badge.nvs_get_u8("sweary", "enable", 0) if enabled: enabled = 0 easydraw.msg("Sweary disabled!") else: enabled = 1 easydraw.msg("Sweary enabled!") easydraw.msg("Go back to the splash and wait...") enabled = badge.nvs_set_u8("sweary", "enable", enabled) time.sleep(5) appglue.home()