1
0
mirror of https://github.com/agdsn/ancient-weatherstation.git synced 2026-06-19 23:07:59 +00:00

Working at home

git-svn-id: file:///home/jan/tmp/wetterstation/trunk@31 dd492736-c11a-0410-ad51-8c26713eaf7f
This commit is contained in:
losinshi
2006-08-21 17:36:41 +00:00
parent 18643bb643
commit b8cc79937b
12 changed files with 409 additions and 23 deletions
+32 -2
View File
@@ -8,6 +8,14 @@ INCL = -I$$(pg_config --includedir)
BIN_NAME = weatherdeamon
OBJS = main.o config.o input.o process.o write.o
CONF_NAME = weatherd.conf
INSTDIR = /usr/bin/
CONFDIR = /etc/
INSTGRP = losinski
INSTUSR = losinski
DESTDIR = /home/losinski
# Alles bauen
all: $(BIN_NAME)
@@ -34,11 +42,33 @@ $(OBJS):
# Programm mit debug-ausgabe bauen
debug:
$(MAKE) all DEBUG=-DDEBUG
@ echo "baue Version mit Debugoutput ..."
@ $(MAKE) all DEBUG=-DDEBUG
# Programm ohne Log-ausgabe bauen
nolog:
$(MAKE) all NOLOG=-DNO_LOGING
@ echo "baue Version ohne Logoutput ..."
@ $(MAKE) all NOLOG=-DNO_LOGING
# Installieren
install:
@ echo "kopiere $(BIN_NAME) nach $(DESTDIR)$(INSTDIR)"
@ mkdir -p $(DESTDIR)$(INSTDIR); \
cp $(BIN_NAME) $(DESTDIR)$(INSTDIR)
@ echo "setze Rechte auf $(BIN_NAME)"
@ cd $(DESTDIR)$(INSTDIR); \
chmod 755 $(BIN_NAME); \
chgrp $(INSTGRP) $(BIN_NAME); \
chown $(INSTUSR) $(BIN_NAME)
@ echo "kopiere $(CONF_NAME) nach $(DESTDIR)$(CONFDIR)"
@ mkdir -p $(DESTDIR)$(CONFDIR); \
cp $(CONF_NAME) $(DESTDIR)$(CONFDIR)
@ echo "setze Rechte auf $(CONF_NAME)"
@ cd $(DESTDIR)$(CONFDIR); \
chmod 755 $(CONF_NAME); \
chgrp $(CONFGRP) $(CONF_NAME); \
chown $(CONFUSR) $(CONF_NAME)
# Aufräumnen (alle Object-Files löschen)
cleanup:
+1
View File
@@ -57,6 +57,7 @@
#define ERROR_READ "sensor-rs232interface: Fehler beim Lesen\n"
#define ERROR_LOGFILE "Log-Error: Kann Logfile nicht öffnen\n"
#define ERROR_FORK "Fork-Fehler: Kann den Prozess nicht in den Hintergrund schieben\n"
#define ERROR_SEIINST "Signal-Fehler: Kann Signalhandler zum beenden nicht installieren\n"
/* Parameter-Flags ----------------------------------------------------- */
+49 -16
View File
@@ -1,7 +1,7 @@
/*
weatherdeamon -- Weather Data Capture Program for the
'ELV-PC-Wettersensor-Empfänger'
'ELV-PC-Wettersensor-Empfaenger'
main.c -- Part of the weatherdeamon
Copyright (C) 2006 Jan Losinski
@@ -30,6 +30,7 @@
#include <stdio.h>
#include <fcntl.h> /* O_WRONLY O_APPEND O_CREAT ... */
#include <string.h>
#include <signal.h>
#include "definitions.h"
#include "config.h"
#include "main.h"
@@ -39,7 +40,7 @@
w_opts global_opts;
clean_struct_ptr clean_ptr = NULL;
#ifndef NO_LOGING
static char *error_buffer = NULL; /* Puffer für Fehler-ausgaben */
static char *error_buffer = NULL; /* Puffer fuer Fehler-ausgaben */
#endif
/* Funktionen ----------------------------------------------------------*/
@@ -53,7 +54,7 @@ static void merge_options(w_opts *);
#endif
static clean_struct_ptr get_last_clean(clean_struct_ptr);
static void clean();
static void exit_sig_handler(int);
/* Jetzt gehts los.... --------------------------------------------------*/
@@ -76,6 +77,19 @@ int main(int argc, char *argv[]){
DEBUGOUT1("Programm gestartet\n");
if(signal(SIGABRT, exit_sig_handler) == SIG_ERR)
exit_error(ERROR_SEIINST);
DEBUGOUT1("Signalhandler zum beenden per SIGABRT installiert\n");
if(signal(SIGINT, exit_sig_handler) == SIG_ERR)
exit_error(ERROR_SEIINST);
DEBUGOUT1("Signalhandler zum beenden per SIGINT installiert\n");
if(signal(SIGQUIT, exit_sig_handler) == SIG_ERR)
exit_error(ERROR_SEIINST);
DEBUGOUT1("Signalhandler zum beenden per SIGQUIT installiert\n");
if(signal(SIGTERM, exit_sig_handler) == SIG_ERR)
exit_error(ERROR_SEIINST);
DEBUGOUT1("Signalhandler zum beenden per SIGTERM installiert\n");
read_config(DEFAULT_CONFIG_FILE,1);
/* Optionen auswerten */
@@ -116,7 +130,7 @@ int main(int argc, char *argv[]){
read_config(extra_conf_file,0);
}
/* Komandozeilen-Optionen zu denen aus der Config-File hinzufügen */
/* Komandozeilen-Optionen zu denen aus der Config-File hinzufuegen */
merge_options(&opts);
/* Debug-Ausgaben, um zu sehen, ob die Optionen richtig gesetzt werden */
@@ -138,8 +152,8 @@ int main(int argc, char *argv[]){
/* Programm in den Hintergrund schicken ? */
background();
DEBUGOUT1("\nBeginne Interface zu öffnen\n\n");
while (1);
DEBUGOUT1("\nBeginne Interface zu oeffnen\n\n");
/* Port Pollen */
read_port();
@@ -159,7 +173,7 @@ static void background(){
}
}
/* Führt die Optionen aus der Komandozeile und die aus dem Conf-File zusammen */
/* Fuehrt die Optionen aus der Komandozeile und die aus dem Conf-File zusammen */
static void merge_options(w_opts *priv){
if((*priv).device != NULL)
global_opts.device = (*priv).device;
@@ -196,8 +210,8 @@ int get_flag(int mask){
}
/* Diese Funktion beendet das Programm mit einer Fehlermeldung. */
void exit_error(char* err)
{
void exit_error(char* err){
DEBUGOUT1("\nEtwas unschoenes ist passiert\n");
clean();
if(errno != 0){
perror("Fehler");
@@ -206,9 +220,27 @@ void exit_error(char* err)
exit(1);
}
/* Wird bei Beendigungssignalen ausgefuehrt */
static void exit_sig_handler(int signr){
#ifdef DEBUG
DEBUGOUT1("\n");
switch (signr){
case SIGABRT:
DEBUGOUT1("SIGABRT Interupt erhalten!\n");
case SIGTERM:
DEBUGOUT1("SIGTERM Interupt erhalten!\n");
case SIGQUIT:
DEBUGOUT1("SIGQUIT Interupt erhalten!\n");
case SIGINT:
DEBUGOUT1("SIGINT Interupt erhalten!\n");
}
#endif
clean();
DEBUGOUT1("Beende Programm...\n");
exit(0);
}
/* Funktionen für die Logfiles */
/* Funktionen fuer die Logfiles */
#ifndef NO_LOGING
/* Schreiben einer Fehlermeldung in das fehler-Logfile */
@@ -225,7 +257,7 @@ void log_data(time_t timestamp, char *msg){
DEBUGOUT1(" -->Data Logged \n");
}
/* Logfile öffnen */
/* Logfile oeffnen */
static int open_logfile(char *file){
int log_fd;
@@ -278,11 +310,11 @@ static clean_struct_ptr get_last_clean(clean_struct_ptr ptr){
return NULL;
}
/* Ein neues Clean-Element anfügen. Ein Clean-Element ist eine Datenstruktur, die
/* Ein neues Clean-Element anfuegen. Ein Clean-Element ist eine Datenstruktur, die
* einen Pointer auf eine Funktion vom Typ
* void func(void *data),
* einen Zeiger auf beliebige Daten und einen Zeiger auf das nächste Element hält.
* Die Funktionen werden beim regulären beenden des Programmes aufgerufen um zum bsp.
* einen Zeiger auf beliebige Daten und einen Zeiger auf das naechste Element haelt.
* Die Funktionen werden beim regulaeren beenden des Programmes aufgerufen um zum bsp.
* datenbankverbindungen zu schließen, etc. */
void add_clean(void (*func)(void *data), void *data){
clean_struct_ptr p, temp = (clean_struct_ptr) malloc(sizeof(clean_data));
@@ -297,8 +329,9 @@ void add_clean(void (*func)(void *data), void *data){
}
}
/* 'Säuberung' ausführen */
/* 'Saeuberung' ausfuehren */
static void clean(){
DEBUGOUT1("\nRaeume auf...\n");
clean_struct_ptr p = clean_ptr;
while(p != NULL){
p->func(p->data);