// User alarm uses alarm 1 // Will trigger when day, hours, minutes, and seconds match void ds3231_setUserAlarmWake(alarm_s* alarm) { // Clear flag rtc_userAlarmState(); byte data; read(DS3231_ADDR_CTRL, &data, 1); if(alarm != NULL) { write(DS3231_ADDR_ALARM1_SECS, 0); write(DS3231_ADDR_ALARM1_MINS, dec2bcd(alarm->min)); write(DS3231_ADDR_ALARM1_HRS, dec2bcd(alarm->hour)); write(DS3231_ADDR_ALARM1_DAYDATE, 0b01000000 | alarm->days); SET_BITS(data, DS3231_BIT_A1IE); } else // Alarm disabled CLEAR_BITS(data, DS3231_BIT_A1IE); write(DS3231_ADDR_CTRL, data); }
rtcwake_t time_wake() { #if RTC_SRC != RTC_SRC_INTERNAL getRtcTime(); // Turn on square wave rtc_sqw(RTC_SQW_ON); // update = false; // Check alarms bool userAlarm = rtc_userAlarmState(); bool systemAlarm = rtc_systemAlarmState(); if(userAlarm && systemAlarm) return RTCWAKE_USER_SYSTEM; else if(userAlarm) return RTCWAKE_USER; else if(systemAlarm) return RTCWAKE_SYSTEM; #endif return RTCWAKE_NONE; }