[FL-1483] Cli: add time set feature to time command (#536)

* Cli: add time set feature to time command
* Cli: better time set function feedback
This commit is contained in:
あく 2021-06-23 23:06:57 +03:00 committed by GitHub
parent 961d61807c
commit ed75bc2c39
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -66,23 +66,68 @@ void cli_command_uuid(Cli* cli, string_t args, void* context) {
}
void cli_command_date(Cli* cli, string_t args, void* context) {
RTC_DateTypeDef date;
RTC_TimeTypeDef time;
RTC_DateTypeDef date;
// TODO add get_datetime to core, not use HAL here
// READ ORDER MATTERS! Time then date.
HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BIN);
if(string_size(args) > 0) {
uint16_t Hours, Minutes, Seconds, Month, Date, Year, WeekDay;
int ret = sscanf(
string_get_cstr(args),
"%hu:%hu:%hu %hu-%hu-%hu %hu",
&Hours,
&Minutes,
&Seconds,
&Month,
&Date,
&Year,
&WeekDay);
if(ret == 7) {
time.Hours = Hours;
time.Minutes = Minutes;
time.Seconds = Seconds;
time.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
time.StoreOperation = RTC_STOREOPERATION_RESET;
date.WeekDay = WeekDay;
date.Month = Month;
date.Date = Date;
date.Year = Year - 2000;
HAL_RTC_SetTime(&hrtc, &time, RTC_FORMAT_BIN);
HAL_RTC_SetDate(&hrtc, &date, RTC_FORMAT_BIN);
string_t datetime_str;
string_init(datetime_str);
string_cat_printf(datetime_str, "%.2d:%.2d:%.2d ", time.Hours, time.Minutes, time.Seconds);
string_cat_printf(datetime_str, "%.2d-%.2d-%.2d", date.Month, date.Date, 2000 + date.Year);
printf(string_get_cstr(datetime_str));
string_clear(datetime_str);
// Verification
HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BIN);
printf(
"New time is: %.2d:%.2d:%.2d %.2d-%.2d-%.2d %d",
time.Hours,
time.Minutes,
time.Seconds,
date.Month,
date.Date,
2000 + date.Year,
date.WeekDay);
} else {
printf(
"Invalid time format, use `hh:mm:ss MM-DD-YYYY WD`. sscanf %d %s",
ret,
string_get_cstr(args));
return;
}
} else {
// TODO add get_datetime to core, not use HAL here
// READ ORDER MATTERS! Time then date.
HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BIN);
printf(
"%.2d:%.2d:%.2d %.2d-%.2d-%.2d %d",
time.Hours,
time.Minutes,
time.Seconds,
date.Month,
date.Date,
2000 + date.Year,
date.WeekDay);
}
}
void cli_command_log(Cli* cli, string_t args, void* context) {