From 29c593c2a4a9afe5ec8cb1dc1c4ea0ae6ee8598c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Thu, 19 Nov 2020 22:03:35 +0100 Subject: [PATCH] Create global 'time' variable which holds RTC value --- firmware/at.c | 23 +++++++++++------------ firmware/keyboard.c | 9 +++------ firmware/led.c | 8 ++++---- firmware/led.h | 1 - firmware/main.c | 20 +------------------- firmware/nightm.c | 5 +++-- firmware/nightm.h | 2 +- firmware/rtc.c | 20 ++++++++++++++++++++ firmware/rtc.h | 4 +++- 9 files changed, 46 insertions(+), 46 deletions(-) diff --git a/firmware/at.c b/firmware/at.c index 46c092e..b99c438 100644 --- a/firmware/at.c +++ b/firmware/at.c @@ -108,15 +108,14 @@ int8_t cmd_at_rst_handler(uint8_t mode, char* arg) } int8_t cmd_at_time_handler(uint8_t mode, char* arg) -{ - struct TIME_HMS time; +{ + struct TIME_HMS n_time; char* val; char* tail; switch(mode) { - case M_GET: - time = rtc_read_time(); + case M_GET: uart_puti(time.hour, 10); uart_putc(':'); uart_puti(time.minute, 10); @@ -125,22 +124,22 @@ int8_t cmd_at_time_handler(uint8_t mode, char* arg) uart_puts("\n\r"); break; - case M_SET: + case M_SET: if(!strlen(arg)) return -1; val = strtok_r(arg, ",", &tail); - time.hour = atoi(val); - if(time.hour >= 24) return -1; + n_time.hour = atoi(val); + if(n_time.hour >= 24) return -1; val = strtok_r(NULL, ",", &tail); - time.minute = atoi(val); - if(time.minute >= 60) return -1; + n_time.minute = atoi(val); + if(n_time.minute >= 60) return -1; val = strtok_r(NULL, ",", &tail); - time.second = atoi(val); - if(time.second >= 60) return -1; + n_time.second = atoi(val); + if(n_time.second >= 60) return -1; - rtc_set_time(&time); + rtc_set_time(&n_time); uart_puts_P(PSTR("+TIM=")); uart_puti(time.hour, 10); diff --git a/firmware/keyboard.c b/firmware/keyboard.c index dce5fff..e16d46a 100644 --- a/firmware/keyboard.c +++ b/firmware/keyboard.c @@ -9,20 +9,17 @@ uint8_t k_inc_hour, k_inc_minute, k_inc_second, k_inc_brightness; void inc_hour(void) { - led_display.hour = (led_display.hour + 1) % 24; - rtc_set_time_part(HOUR, led_display.hour); + rtc_set_time_part(HOUR, (time.hour + 1) % 24); } void inc_minute(void) { - led_display.minute = (led_display.minute + 1) % 60; - rtc_set_time_part(MINUTE, led_display.minute); + rtc_set_time_part(MINUTE, (time.minute + 1) % 60); } void inc_second(void) { - led_display.second = (led_display.second + 1) % 60; - rtc_set_time_part(SECOND, led_display.second); + rtc_set_time_part(SECOND, (time.second + 1) % 60); } void inc_brightness(void) diff --git a/firmware/led.c b/firmware/led.c index 5eb10f0..1e6ea58 100644 --- a/firmware/led.c +++ b/firmware/led.c @@ -2,8 +2,8 @@ #include #include "config.h" #include "led.h" +#include "rtc.h" -volatile struct TIME_HMS led_display = { 0, 0, 0 }; volatile uint8_t led_btnes; void led_init(void) @@ -48,15 +48,15 @@ ISR(TIMER0_OVF_vect) switch(curr_anode) { case 1: - LED_PORT = ~led_display.hour; + LED_PORT = ~time.hour; ANODES_PORT = led_btnes >= pwm_counter ? ~HOUR_ANODE : 0xFF; break; case 2: - LED_PORT = ~led_display.minute; + LED_PORT = ~time.minute; ANODES_PORT = led_btnes >= pwm_counter ? ~MINUTE_ANODE : 0xFF; break; case 4: - LED_PORT = ~led_display.second; + LED_PORT = ~time.second; ANODES_PORT = led_btnes >= pwm_counter ? ~SECOND_ANODE : 0xFF; break; } diff --git a/firmware/led.h b/firmware/led.h index 6d5dbdd..6e99cd1 100644 --- a/firmware/led.h +++ b/firmware/led.h @@ -12,7 +12,6 @@ #define MINUTE_ANODE (1<= 0) { - uint16_t current = TIME2INT(*curr_time); + uint16_t current = TIME2INT(time); uint16_t begin = TIME2INT(ram_cfg.night_mode.begin); uint16_t end = TIME2INT(ram_cfg.night_mode.end); diff --git a/firmware/nightm.h b/firmware/nightm.h index 16b157a..daf2720 100644 --- a/firmware/nightm.h +++ b/firmware/nightm.h @@ -5,6 +5,6 @@ #include "time.h" void nightm_config(struct NIGHTM_CFG* cfg); -void nightm_handle(struct TIME_HMS* curr_time); +void nightm_handle(void); #endif \ No newline at end of file diff --git a/firmware/rtc.c b/firmware/rtc.c index 8e2a7d8..e6b2f65 100644 --- a/firmware/rtc.c +++ b/firmware/rtc.c @@ -1,7 +1,10 @@ +#include #include #include "rtc.h" #include "i2c.h" +volatile struct TIME_HMS time; + void rtc_int0_init(void) { INT0_DIR &= ~(1<> 4) & 0x0F) * 10) + ((bcd) & 0x0F)) +extern volatile struct TIME_HMS time; + void rtc_int0_init(void); void rtc_int1_init(void); void rtc_set_time(struct TIME_HMS* time); void rtc_set_time_part(uint8_t part, uint8_t value); -struct TIME_HMS rtc_read_time(void); +uint8_t rtc_handle_timer(void); #endif \ No newline at end of file