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