commit 46d617a6f488ad9b2263a5636727a5d12f4e0589
parent ed59d39b6fa1334faf5a3c52bb95b71569d5851c
Author: Paco Esteban <paco@e1e0.net>
Date: Mon, 6 Jul 2020 13:07:38 +0200
lcd init process has its own function
It now returns a pointer to the lcd struct.
Diffstat:
M | clock.c | | | 60 | ++++++++++++++++++++++++++++++++++++------------------------ |
1 file changed, 36 insertions(+), 24 deletions(-)
diff --git a/clock.c b/clock.c
@@ -36,10 +36,11 @@
#define PIC_VERSION "v0.4.0"
-void setmonth(char *, int);
-void setwday(char *, int);
-int getExtTag(char *, char *);
-void usage();
+lcd_i2c_t *init_lcd(void);
+void setmonth(char *, int);
+void setwday(char *, int);
+void usage();
+int getExtTag(char *, char *);
int
main(int argc, char *argv[])
@@ -95,20 +96,13 @@ main(int argc, char *argv[])
return 0;
}
- lcd_i2c_t lcd={0};
- if (lcd_i2c_setup(&lcd, I2C_ADDRESS) == -1){
+ lcd_i2c_t *lcd = init_lcd();
+ if (lcd == NULL)
errx(1,
"Error intialising PCF8574 at address i2c 0x%02x: %s\n",
I2C_ADDRESS,
strerror(errno)
);
- }
-
- lcd_i2c_init(&lcd);
- LCD_I2C_BACKLIGHT_ON(&lcd);
- backlight_status = 1;
- lcd_i2c_clear(&lcd);
- printf("Display initialized\n");
if (wiringPiSetup() < 0) {
errx(1, "Unable to setup wiringPi: %s\n", strerror(errno));
@@ -124,12 +118,12 @@ main(int argc, char *argv[])
if (tm->tm_hour >= bl_before && tm->tm_hour <= bl_after) {
if (backlight_status && !tmp_on_cycles) {
- LCD_I2C_BACKLIGHT_OFF(&lcd);
+ LCD_I2C_BACKLIGHT_OFF(lcd);
backlight_status = 0;
}
} else {
if (!backlight_status) {
- LCD_I2C_BACKLIGHT_ON(&lcd);
+ LCD_I2C_BACKLIGHT_ON(lcd);
backlight_status = 1;
}
}
@@ -151,19 +145,20 @@ main(int argc, char *argv[])
sprintf(line0, " %02d:%02d:%02d GMT%+ld ",
tm->tm_hour, tm->tm_min, tm->tm_sec, gmt_offset);
}
- lcd.x=0;
- lcd.y=0;
- lcd_i2c_gotoxy(&lcd, lcd.x, lcd.y);
- lcd_i2c_puts(&lcd, line0);
+
+ lcd->x=0;
+ lcd->y=0;
+ lcd_i2c_gotoxy(lcd, lcd->x, lcd->y);
+ lcd_i2c_puts(lcd, line0);
setwday(str_wday, tm->tm_wday);
setmonth(str_month, tm->tm_mon);
sprintf(line1, "%s, %s %2d %4d",
str_wday, str_month, tm->tm_mday, 1900+tm->tm_year);
- lcd.x=0;
- lcd.y=1;
- lcd_i2c_gotoxy(&lcd, lcd.x, lcd.y);
- lcd_i2c_puts(&lcd, line1);
+ lcd->x=0;
+ lcd->y=1;
+ lcd_i2c_gotoxy(lcd, lcd->x, lcd->y);
+ lcd_i2c_puts(lcd, line1);
if (digitalRead(BUTTON1) == LOW) {
if (backlight_status) {
@@ -177,7 +172,7 @@ main(int argc, char *argv[])
}
}
} else {
- LCD_I2C_BACKLIGHT_ON(&lcd);
+ LCD_I2C_BACKLIGHT_ON(lcd);
backlight_status = 1;
tmp_on_cycles = 16;
}
@@ -190,6 +185,8 @@ main(int argc, char *argv[])
delay(sleepInterval);
}
+ free(lcd);
+
return 0;
}
@@ -301,3 +298,18 @@ usage(void)
"\t[-S <miliseconds>] [-r <readCount>] [-e <tagfile>]\n");
exit(1);
}
+
+lcd_i2c_t *
+init_lcd()
+{
+ lcd_i2c_t *lcd = malloc(sizeof(lcd_i2c_t));
+ if (lcd_i2c_setup(lcd, I2C_ADDRESS) == -1){
+ return NULL;
+ }
+
+ lcd_i2c_init(lcd);
+ lcd_i2c_clear(lcd);
+ printf("Display initialized\n");
+
+ return lcd;
+}