xref: /aosp_15_r20/external/autotest/autotest_lib/client/cros/rtc.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li# Lint as: python2, python3
2*9c5db199SXin Li# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
3*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can
4*9c5db199SXin Li# be # found in the LICENSE file.
5*9c5db199SXin Li
6*9c5db199SXin Li"""Provides utility methods for the Real Time Clock device.
7*9c5db199SXin Li"""
8*9c5db199SXin Li
9*9c5db199SXin Liimport errno, glob, os
10*9c5db199SXin Li
11*9c5db199SXin Li
12*9c5db199SXin Lidef get_rtc_devices():
13*9c5db199SXin Li    """
14*9c5db199SXin Li    Return a list of all RTC device names on the system.
15*9c5db199SXin Li
16*9c5db199SXin Li    The RTC device node will be found at /dev/$NAME.
17*9c5db199SXin Li    """
18*9c5db199SXin Li    return [os.path.basename(rtc) for rtc in glob.glob('/sys/class/rtc/*')]
19*9c5db199SXin Li
20*9c5db199SXin Li
21*9c5db199SXin Lidef get_seconds(utc=True, rtc_device='rtc0'):
22*9c5db199SXin Li    """
23*9c5db199SXin Li    Read the current time out of the RTC
24*9c5db199SXin Li    """
25*9c5db199SXin Li    with open('/sys/class/rtc/%s/since_epoch' % rtc_device) as rf:
26*9c5db199SXin Li        seconds = rf.readline()
27*9c5db199SXin Li    return int(seconds)
28*9c5db199SXin Li
29*9c5db199SXin Li
30*9c5db199SXin Lidef write_wake_alarm(alarm_time, rtc_device='rtc0'):
31*9c5db199SXin Li    """
32*9c5db199SXin Li    Write a value to the wake alarm
33*9c5db199SXin Li    """
34*9c5db199SXin Li    with open('/sys/class/rtc/%s/wakealarm' % rtc_device, 'w') as f:
35*9c5db199SXin Li        f.write('%s\n' % str(alarm_time))
36*9c5db199SXin Li
37*9c5db199SXin Li
38*9c5db199SXin Lidef set_wake_alarm(alarm_time, rtc_device='rtc0'):
39*9c5db199SXin Li    """
40*9c5db199SXin Li    Set the hardware RTC-based wake alarm to 'alarm_time'.
41*9c5db199SXin Li    """
42*9c5db199SXin Li    try:
43*9c5db199SXin Li        write_wake_alarm(alarm_time, rtc_device)
44*9c5db199SXin Li    except IOError as errs:
45*9c5db199SXin Li        (errnum, strerror) = errs.args
46*9c5db199SXin Li        if errnum != errno.EBUSY:
47*9c5db199SXin Li            raise
48*9c5db199SXin Li        write_wake_alarm('0', rtc_device)
49*9c5db199SXin Li        write_wake_alarm(alarm_time, rtc_device)
50