static void cmd_alarm(BaseSequentialStream *chp, int argc, char *argv[]){ int i = 0; (void)argv; if (argc < 1) { goto ERROR; } if ((argc == 1) && (strcmp(argv[0], "get") == 0)){ rtcGetAlarm(&RTCD1, 0, &alarmspec); chprintf(chp, "%D%s",alarmspec," - alarm in STM internal format\r\n"); return; } if ((argc == 2) && (strcmp(argv[0], "set") == 0)){ i = atol(argv[1]); alarmspec.tv_datetime = ((i / 10) & 7 << 4) | (i % 10) | RTC_ALRMAR_MSK4 | RTC_ALRMAR_MSK3 | RTC_ALRMAR_MSK2; rtcSetAlarm(&RTCD1, 0, &alarmspec); return; } else{ goto ERROR; } ERROR: chprintf(chp, "Usage: alarm get\r\n"); chprintf(chp, " alarm set N\r\n"); chprintf(chp, "where N is alarm time in seconds\r\n"); }
static void cmd_alarm(BaseSequentialStream *chp, int argc, char *argv[]){ (void)argv; struct tm timp; if (argc < 1) { goto ERROR; } if ((argc == 1) && (strcmp(argv[0], "get") == 0)){ rtcGetAlarm(&RTCD1, 0, &alarmspec); timp.tm_sec = alarmspec.alsec; timp.tm_min = alarmspec.almin; timp.tm_hour = alarmspec.alhour; timp.tm_mday = alarmspec.aldom; timp.tm_mon = alarmspec.almonth - 1; timp.tm_wday = alarmspec.aldow; timp.tm_year = alarmspec.alyear - 1900; timp.tm_yday = alarmspec.aldoy - 1; chprintf(chp, "%D%s",mktime(&timp)," - alarm in seconds\r\n"); return; } if ((argc == 2) && (strcmp(argv[0], "set") == 0)){ unix_time = (uint32_t)atol(argv[1]); localtime_r(&unix_time, &timp); alarmspec.alsec = timp.tm_sec; alarmspec.almin = timp.tm_min; alarmspec.alhour = timp.tm_hour; alarmspec.aldom = timp.tm_mday; alarmspec.almonth = timp.tm_mon + 1; alarmspec.aldow = timp.tm_wday; alarmspec.alyear = timp.tm_year + 1900; alarmspec.aldoy = timp.tm_yday + 1; rtcSetAlarm(&RTCD1, 0, &alarmspec); rtcSetCallback(&RTCD1, wakeup_cb); return; } else{ goto ERROR; } ERROR: chprintf(chp, "Usage: alarm get\r\n"); chprintf(chp, " alarm set N\r\n"); chprintf(chp, "where N is alarm time in seconds\r\n"); }