Files
Lamps/Core/Clock/clock_manager.c

67 lines
1.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "clock_manager.h"
#include "segment.h"
#include "rtc.h"
static uint8_t dutyValue = 5;
static time_t currentTime;
RTC_TimeTypeDef rtc_time;
// Яркость в RTC Backup Register (используем BKP_DR1)
static void SaveDuty(void) {
HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1, dutyValue);
}
static void LoadDuty(void) {
uint32_t val = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1);
dutyValue = (val <= 10 && val > 0) ? (uint8_t)val : 5;
}
void ClockManager_Init(void) {
LoadDuty();
Segment_SetBrightness(dutyValue * 10);
// Если RTC не инициализирован - сброс времени
if (HAL_RTC_GetTime(&hrtc, &rtc_time, RTC_FORMAT_BIN) != HAL_OK) {
ClockManager_ResetTime();
}
}
time_t ClockManager_GetTime(int blink) {
HAL_RTC_GetTime(&hrtc, &rtc_time, RTC_FORMAT_BIN);
currentTime.hour = rtc_time.Hours;
currentTime.min = rtc_time.Minutes;
if(blink)
{
if(currentTime.sec != rtc_time.Seconds)
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
}
currentTime.sec = rtc_time.Seconds;
return currentTime;
}
void ClockManager_SetTime(uint8_t hour, uint8_t min, uint8_t sec) {
RTC_TimeTypeDef rtc_time;
rtc_time.Hours = hour;
rtc_time.Minutes = min;
rtc_time.Seconds = sec;
// rtc_time.TimeFormat = RTC_HOURFORMAT_24;
// rtc_time.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
// rtc_time.StoreOperation = RTC_STOREOPERATION_RESET;
HAL_RTC_SetTime(&hrtc, &rtc_time, RTC_FORMAT_BIN);
}
uint8_t ClockManager_GetDuty(void) {
return dutyValue;
}
void ClockManager_SetDuty(uint8_t value) {
if (value > 10) value = 10;
dutyValue = value;
Segment_SetBrightness(dutyValue * 10);
SaveDuty();
}
void ClockManager_ResetTime(void) {
ClockManager_SetTime(0, 0, 0);
}