Skip to content
Snippets Groups Projects
Select Git revision
2 results Searching

nanosoc_system.v

Blame
  • main.py 1.52 KiB
    import time
    import json
    from picographics import PicoGraphics, DISPLAY_PICO_DISPLAY, PEN_RGB332
    from pimoroni import Button
    from totp import totp
    from synchronised_time import create_synchronised_time
    
    
    LED_BLINK_UNDER_SECONDS = 6
    
    display = PicoGraphics(display = DISPLAY_PICO_DISPLAY, pen_type=PEN_RGB332, rotate = 0)
    display.set_font("bitmap8")
    WHITE = display.create_pen(255, 255, 255)
    BLACK = display.create_pen(0, 0, 0)
    button_a = Button(12)
    button_b = Button(13)
    button_x = Button(14)
    button_y = Button(15)
    display_width, display_height = display.get_bounds()
    
    
    def hex_to_rgb(hex):
        return tuple(int(hex[i:i+2], 16) for i in (1, 3, 5))
    
    
    codes = json.loads(open("codes.json", "r").read())
    selected_idx = 0
    
    synchronised_time = create_synchronised_time(display, button_a, button_b, button_x, button_y)
    
    while True:
        #TODO: change selected when user presses a button 
    
        code = codes[selected_idx]
    
        (password, expiry) = totp(synchronised_time(),
                                  code['key'],
                                  step_secs=code['step'],
                                  digits=code['digits'])
    
        colour = hex_to_rgb(code['colour'])
        display.set_pen(display.create_pen(*colour))
        display.clear()
    
        display.set_pen(BLACK)
        display.text(code['name'], 10, 10, display_width - 10, 4)
        display.text(password, 10, 60, display_width - 10, 6)
    
        progress_width = display_width - \
            (display_width // code['step'] * (expiry - 1))
        display.rectangle(0, 125, progress_width, 10)
    
        display.update()
        time.sleep(0.5)