def pm_task():
    ''' The power management task [internal function] '''
    global requestedStandbyTime
    global timeout
    global disabled

    if disabled:
        return timeout

    idleTime = virtualtimers.idle_time()

    usbStayAwake = False
    try:
        import voltages
        usbStayAwake = voltages.usb() > 2500 and machine.nvs_get_u8(
            'system', 'usb_stay_awake')
    except:
        pass

    if idleTime > 30000 and (not usbStayAwake):
        global onSleepCallback
        if not onSleepCallback == None:
            print("[Power management] Running onSleepCallback...")
            try:
                onSleepCallback(idleTime)
            except BaseException as e:
                print("[ERROR] An error occurred in the on sleep callback.")
                sys.print_exception(e)
        system.sleep(idleTime, False)

    return timeout
buttons.attach(buttons.BTN_A, toggleLeds)


def draw(vbatt, vusb):
    display.drawFill(0x000000)
    display.drawText(0, 0, "Battery")
    display.drawText(0, 15, "USB")
    display.drawText(50, 0, str(vbatt) + "v")
    display.drawText(50, 15, str(vusb) + "v")

    dataPoints.pop(0)
    dataPoints.append(round(vbatt * 8))
    for i in range(64):
        display.drawPixel(i, display.height() - 1 - dataPoints[i], 0xFFFFFF)

    dataPoints2.pop(0)
    dataPoints2.append(round(vusb * 8))
    for i in range(64):
        display.drawPixel(64 + i,
                          display.height() - 1 - dataPoints2[i], 0xFFFFFF)

    display.flush()


while True:
    vbatt = voltages.battery() / 1000.0
    vusb = voltages.usb() / 1000.0
    draw(vbatt, vusb)
    time.sleep(0.1)
def usb_attached():
    try:
        import voltages
        return voltages.usb() > 4500
    except:
        return False