/*! * \brief Set an X12xx hardware clock. * * \deprecated New applications must use NutRtcSetTime(). * * New time will be taken over at the beginning of the next second. * * \param tm Points to a structure which contains the date and time * information. * * \return 0 on success or -1 in case of an error. */ int X12RtcSetClock(CONST struct _tm *tm) { u_char data[10]; memset(data, 0, sizeof(data)); if (tm) { data[1] = X12RTC_SC; data[2] = BIN2BCD(tm->tm_sec); data[3] = BIN2BCD(tm->tm_min); data[4] = BIN2BCD(tm->tm_hour) | 0x80; data[5] = BIN2BCD(tm->tm_mday); data[6] = BIN2BCD(tm->tm_mon + 1); if (tm->tm_year > 99) { data[7] = BIN2BCD(tm->tm_year - 100); data[9] = 0x20; } else { data[7] = BIN2BCD(tm->tm_year); data[9] = 0x19; } data[8] = tm->tm_wday; } return(X12RtcWrite(0, data, 10)); }
/*! * \brief Set alarm of an X12xx hardware clock. * * \deprecated New applications must use NutRtcSetAlarm(). * * \param idx Zero based index. Two alarms are supported. * \param tm Points to a structure which contains the date and time * information. May be NULL to clear the alarm. * \param aflgs Each bit enables a specific comparision. * - Bit 0: Seconds * - Bit 1: Minutes * - Bit 2: Hours * - Bit 3: Day of month * - Bit 4: Month * - Bit 7: Day of week (Sunday is zero) * * \return 0 on success or -1 in case of an error. */ int X12RtcSetAlarm(int idx, CONST struct _tm *tm, int aflgs) { u_char data[10]; memset(data, 0, sizeof(data)); data[1] = idx * 8; if (tm) { if (aflgs & RTC_ALARM_SECOND) { data[2] = BIN2BCD(tm->tm_sec) | X12RTC_SCA_ESC; } if (aflgs & RTC_ALARM_MINUTE) { data[3] = BIN2BCD(tm->tm_min) | X12RTC_MNA_EMN; } if (aflgs & RTC_ALARM_HOUR) { data[4] = BIN2BCD(tm->tm_hour) | X12RTC_HRA_EHR; } if (aflgs & RTC_ALARM_MDAY) { data[5] = BIN2BCD(tm->tm_mday) | X12RTC_DTA_EDT; } if (aflgs & RTC_ALARM_MONTH) { data[6] = BIN2BCD(tm->tm_mon) | X12RTC_MOA_EMO; } if (aflgs & RTC_ALARM_WDAY) { data[8] = BIN2BCD(tm->tm_wday) | X12RTC_DWA_EDW; } } return(X12RtcWrite(1, data, 10)); }
/*! * \brief Set alarm of an X12xx hardware clock. * * \deprecated New applications must use NutRtcSetAlarm(). * * \param idx Zero based index. Two alarms are supported. * \param tm Points to a structure which contains the date and time * information. May be NULL to clear the alarm. * \param aflgs Each bit enables a specific comparision. * - Bit 0: Seconds * - Bit 1: Minutes * - Bit 2: Hours * - Bit 3: Day of month * - Bit 4: Month * - Bit 7: Day of week (Sunday is zero) * * \return 0 on success or -1 in case of an error. */ int X12RtcSetAlarm(int idx, CONST struct _tm *tm, int aflgs) { u_char data[10]; int flags; memset(data, 0, sizeof(data)); data[1] = idx * 8; if (tm) { if (aflgs & RTC_ALARM_SECOND) { data[2] = BIN2BCD(tm->tm_sec) | X12RTC_SCA_ESC; } if (aflgs & RTC_ALARM_MINUTE) { data[3] = BIN2BCD(tm->tm_min) | X12RTC_MNA_EMN; } if (aflgs & RTC_ALARM_HOUR) { data[4] = BIN2BCD(tm->tm_hour) | X12RTC_HRA_EHR; } if (aflgs & RTC_ALARM_MDAY) { data[5] = BIN2BCD(tm->tm_mday) | X12RTC_DTA_EDT; } if (aflgs & RTC_ALARM_MONTH) { data[6] = BIN2BCD(tm->tm_mon + 1) | X12RTC_MOA_EMO; } if (aflgs & RTC_ALARM_WDAY) { data[8] = BIN2BCD(tm->tm_wday) | X12RTC_DWA_EDW; } } X12RtcGetAlarm(1, &test, &flags); //printf("\n set Alarm: date: %d-%d-%d Time: %d:%d:%d \n", test.tm_year, test.tm_mon, test.tm_mday, test.tm_hour, test.tm_min, test.tm_sec); return(X12RtcWrite(1, data, 10)); }