def test_invalid_time_source(): import rv3028 device = rv3028.RV3028(i2c_dev=MockSMBus(1)) with pytest.raises(TypeError): device.set_alarm_time(None) with pytest.raises(TypeError): device.set_alarm_time(None, weekday=1)
def test_alarm_hours_24(): import rv3028 device = rv3028.RV3028(i2c_dev=MockSMBus(1, default_registers={ 0x08: 0b00100001, # 21 hours })) assert device.get_alarm_time().hour == 21
def test_unix_time_lsb(): import rv3028 device = rv3028.RV3028(i2c_dev=MockSMBus(1, default_registers={ 0x1b: 0xff # Bits 0-7 of UNIX_TIME })) assert device.get_unix_time() == 0xff
def test_timer_value(): import rv3028 device = rv3028.RV3028(i2c_dev=MockSMBus( 1, default_registers={ 0x0a: 0xff, # Bits 0-7 of TIMER_VALUE, 0x0b: 0x0f # Bits 11-8 of TIMER_VVALUE })) assert device.get_periodic_timer_countdown_value() == 0xfff
def test_timer_status(): import rv3028 device = rv3028.RV3028(i2c_dev=MockSMBus( 1, default_registers={ 0x0c: 0xff, # Bits 0-7 of TIMER_STATUS, 0x0d: 0x0f # Bits 11-8 of TIMER_STATUS })) assert device.get_periodic_timer_countdown_status() == 0xfff
def test_time_and_date(): t = datetime.time(12, 39, 7) d = datetime.date(2020, 2, 29) smbus = MockSMBus(1) import rv3028 device = rv3028.RV3028(i2c_dev=smbus) device.set_time(t) device.set_date(d) assert device.get_time() == t assert device.get_date() == d assert smbus.regs[0x02] == 0b00010010 assert smbus.regs[0x05] == 0b00000010 assert smbus.regs[ 0x06] == 0b00100000 # 2020, but we have a year offset of +2000 internally so the BCD value is just 20
def test_setup(): sys.modules['smbus'] = mock.Mock() sys.modules['smbus'].SMBus = MockSMBus import rv3028 device = rv3028.RV3028() device.reset() device.get_id() device.set_time_and_date((2001, 1, 1, 1, 1, 1)) current = device.get_time_and_date() device.set_time_and_date(current) device.set_unix_time(0xFF) unix_time = device.get_unix_time() device.set_unix_time(unix_time) device.set_alarm_time((1, 1, 1, 1), 1) device.get_alarm_time() device.set_alarm_setting('disabled_monthly') device.get_alarm_setting() device.get_alarm_interrupt() device.clear_alarm_interrupt() for settings in device.alarm_frequency: device.set_alarm_setting(settings) device.get_alarm_setting() device.set_battery_switchover('level_switching_mode') device.get_battery_switchover() device.clear_all_interrupts() device.get_all_interrupts() device.stop_periodic_timer() device.set_periodic_timer_frequency('1Hz') device.get_periodic_timer_frequency() device.set_periodic_timer_countdown_value(0xFFFF) device.get_periodic_timer_countdown_value() device.get_periodic_timer_countdown_status() device.start_periodic_timer() device.clear_periodic_countdown_timer_interrupt() device.get_periodic_countdown_timer_interrupt() del device
#!/usr/bin/env python import rv3028 import time print( """set-countdown-timer.py - Set the periodic countdown timer to 5 x 1 second ticks and waits for alarm to be triggered. Press Ctrl+C to exit. """) # Create RV3028 instance rtc = rv3028.RV3028() countdown_time = 5 try: rtc.stop_periodic_timer() rtc.set_periodic_timer_frequency( '1Hz' ) # Frequency of each timer tick can take '4036Hz', '63Hz','1Hz', '0.016Hz' (1Hz == 1 second) rtc.set_periodic_timer_countdown_value( countdown_time ) # Set number of timer ticks before countdown alarm is triggered rtc.clear_periodic_countdown_timer_interrupt() rtc.start_periodic_timer() # Start timer running print('Countdown timer set for {} seconds\n'.format(countdown_time)) while not rtc.get_periodic_countdown_timer_interrupt(): print('Countdown is {}'.format(rtc.get_periodic_timer_countdown_status( ))) # Show how many ticks are left of the countdown
def test_invalid_datetime_source(): import rv3028 device = rv3028.RV3028(i2c_dev=MockSMBus(1)) with pytest.raises(TypeError): device.set_time_and_date(None)
def test_set_alarm_time(): import rv3028 device = rv3028.RV3028(i2c_dev=MockSMBus(1)) device.set_alarm_time(datetime.datetime(2020, 2, 29, 12, 44)) device.set_alarm_time(datetime.datetime(2020, 2, 29, 12, 44), weekday=1)
def test_set_alarm_time_tuple(): import rv3028 device = rv3028.RV3028(i2c_dev=MockSMBus(1)) device.set_alarm_time((1, 12, 44)) device.set_alarm_time((12, 44), weekday=1)