75 lines
2 KiB
Python
75 lines
2 KiB
Python
# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
"""Platform agnostic time implementation"""
|
|
|
|
from adafruit_blinka import agnostic
|
|
|
|
# We intentionally are patching into this namespace so skip the wildcard check.
|
|
# pylint: disable=unused-wildcard-import,wildcard-import
|
|
|
|
if agnostic.implementation == "circuitpython":
|
|
from time import *
|
|
elif agnostic.implementation == "micropython":
|
|
import utime
|
|
from utime import sleep
|
|
|
|
from ucollections import namedtuple
|
|
|
|
_struct_time = namedtuple(
|
|
"struct_time",
|
|
(
|
|
"tm_year",
|
|
"tm_mon",
|
|
"tm_mday",
|
|
"tm_hour",
|
|
"tm_min",
|
|
"tm_sec",
|
|
"tm_wday",
|
|
"tm_yday",
|
|
"tm_isdst",
|
|
),
|
|
)
|
|
|
|
# pylint: disable=too-many-arguments
|
|
def _marshal_time(
|
|
tm_year,
|
|
tm_mon,
|
|
tm_mday,
|
|
tm_hour=0,
|
|
tm_min=0,
|
|
tm_sec=0,
|
|
tm_wday=-1,
|
|
tm_yday=-1,
|
|
tm_isdst=-1,
|
|
):
|
|
"""Construct struct_time with default values."""
|
|
_struct_time(
|
|
tm_year,
|
|
tm_mon,
|
|
tm_mday,
|
|
tm_hour,
|
|
tm_min,
|
|
tm_sec,
|
|
tm_wday,
|
|
tm_yday,
|
|
tm_isdst,
|
|
)
|
|
|
|
def struct_time(time_tuple):
|
|
"""Create a struct_time"""
|
|
return _marshal_time(*time_tuple)
|
|
|
|
# pylint: disable=invalid-name
|
|
_total_ms = 0
|
|
_prev_ticks_ms = utime.ticks_ms()
|
|
|
|
def monotonic():
|
|
"""A monotonically increasing time in seconds. No defined start time."""
|
|
# Assumes that monotonic is called more frequently than the wraparound of micropython's
|
|
# utime.ticks_ms()
|
|
global _prev_ticks_ms, _total_ms # pylint: disable=global-statement
|
|
ticks_ms = utime.ticks_ms()
|
|
_total_ms += utime.ticks_diff(ticks_ms, _prev_ticks_ms)
|
|
_prev_ticks_ms = ticks_ms
|
|
return _total_ms * 0.001
|