pi_clock

Crude and unpolished clock for Raspberry Pi
git clone https://git.e1e0.net/pi_clock.git
Log | Files | Refs | README | LICENSE

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:
Mclock.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; +}