added arduino settings support
This commit is contained in:
@@ -1,14 +1,16 @@
|
|||||||
/*
|
/*
|
||||||
* UNO Monitor Daemon
|
* UNO Monitor Daemon v.0.1.0
|
||||||
* Kidacro <kidacro@archamedis.net>
|
* Kidacro <kidacro@archamedis.net>
|
||||||
|
* https://kidacro.archamedis.net/git/kidacro/Arduino/src/branch/main/uno-stats-monitor
|
||||||
*
|
*
|
||||||
* gather_stats.c - retrieves stats from system
|
* gather_stats.c - retrieves stats from system
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <sys/sysinfo.h>
|
#include <sys/sysinfo.h>
|
||||||
#include <sys/vfs.h>
|
#include <sys/vfs.h>
|
||||||
@@ -16,6 +18,7 @@
|
|||||||
#define MAX_ENTRIES 10
|
#define MAX_ENTRIES 10
|
||||||
|
|
||||||
// from monitor_daemon.c
|
// from monitor_daemon.c
|
||||||
|
bool file_exists(const char *filename);
|
||||||
void send_stats();
|
void send_stats();
|
||||||
|
|
||||||
// local function prototypes
|
// local function prototypes
|
||||||
@@ -120,7 +123,7 @@ void get_stats()
|
|||||||
|
|
||||||
snprintf(line_1,sizeof(line_1),"#1%s%% %sC %sM@",cpuload,cputemp,freemem);
|
snprintf(line_1,sizeof(line_1),"#1%s%% %sC %sM@",cpuload,cputemp,freemem);
|
||||||
snprintf(line_2,sizeof(line_2),"#2%s@",trim(freespace));
|
snprintf(line_2,sizeof(line_2),"#2%s@",trim(freespace));
|
||||||
snprintf(line_3,sizeof(line_3),"#3%s@",cpuload);
|
snprintf(line_3,sizeof(line_3),"#-%s@",cpuload);
|
||||||
|
|
||||||
send_stats(line_1,line_2,line_3);
|
send_stats(line_1,line_2,line_3);
|
||||||
|
|
||||||
@@ -192,11 +195,16 @@ void get_cpu_temp()
|
|||||||
FILE* ptr;
|
FILE* ptr;
|
||||||
char str[10];
|
char str[10];
|
||||||
|
|
||||||
|
// check if file exists
|
||||||
|
if(!file_exists(cpu_temp_file)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// opening file in readonly mode
|
// opening file in readonly mode
|
||||||
ptr = fopen(&*cpu_temp_file, "r");
|
ptr = fopen(&*cpu_temp_file, "r");
|
||||||
|
|
||||||
if(NULL == ptr) {
|
if(NULL == ptr) {
|
||||||
fprintf(log_stream,"File %s can't be opened!\n",cpu_temp_file);
|
fprintf(log_stream,"File cpu_temp_file: %s, can't be opened!\n",cpu_temp_file);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* UNO Monitor Daemon
|
* UNO Monitor Daemon v.0.1.0
|
||||||
* Kidacro <kidacro@archamedis.net>
|
* Kidacro <kidacro@archamedis.net>
|
||||||
|
* https://kidacro.archamedis.net/git/kidacro/Arduino/src/branch/main/uno-stats-monitor
|
||||||
*
|
*
|
||||||
* monitor_daemon.c - Sends and Receives commands to UNO Monitor over serial connection
|
* monitor_daemon.c - Sends and Receives commands to UNO Monitor over serial connection
|
||||||
*
|
*
|
||||||
@@ -9,18 +10,25 @@
|
|||||||
* End char is: '@'
|
* End char is: '@'
|
||||||
* 2nd char denotes which line number/mode to use
|
* 2nd char denotes which line number/mode to use
|
||||||
*
|
*
|
||||||
|
* Setting Schema:
|
||||||
|
* LCDLength:LCDDelay:LEDBrightness:LEDDelay
|
||||||
|
* 16:5:1:3
|
||||||
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* Line 1: #1Archamedis Status@
|
* Line 1: #1Archamedis Status@
|
||||||
* Line 2: #299% free / etc.@
|
* Line 2: #299% free / etc.@
|
||||||
* LAVG 3: #324@
|
* LAVG -: #324@
|
||||||
|
* LSET 0: #16:5:1:3@
|
||||||
*
|
*
|
||||||
* Output Schema:
|
* Output Schema:
|
||||||
* Multimedia Controls use single characters to denote which button was pressed
|
* Multimedia Controls use single characters to denote which button was pressed
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// C library
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdbool.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <syslog.h>
|
#include <syslog.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
@@ -32,6 +40,9 @@
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
// external libs
|
||||||
#include <libconfig.h>
|
#include <libconfig.h>
|
||||||
|
|
||||||
#define MAX_ENTRIES 10
|
#define MAX_ENTRIES 10
|
||||||
@@ -42,7 +53,7 @@ int running = 0;
|
|||||||
char *conf_file_name = "unomond.conf";
|
char *conf_file_name = "unomond.conf";
|
||||||
char *pid_file_name = "/tmp/unomond.pid";
|
char *pid_file_name = "/tmp/unomond.pid";
|
||||||
int pid_fd = -1;
|
int pid_fd = -1;
|
||||||
const char *app_name = "UnomonD";
|
const char *app_name = "UnomonD v.0.1.0";
|
||||||
FILE *log_stream;
|
FILE *log_stream;
|
||||||
char *log_file_name = NULL;
|
char *log_file_name = NULL;
|
||||||
int serial_port;
|
int serial_port;
|
||||||
@@ -50,15 +61,17 @@ struct termios tty;
|
|||||||
struct timeval __millis_start;
|
struct timeval __millis_start;
|
||||||
|
|
||||||
// config file settings
|
// config file settings
|
||||||
int delay = 10000;
|
int delay = 5000;
|
||||||
int line_length = 16;
|
int line_length = 16;
|
||||||
int line_count = 2;
|
int line_count = 2;
|
||||||
|
int lcd_delay = 5;
|
||||||
|
int led_brightness = 5;
|
||||||
|
int led_delay = 3;
|
||||||
const char *cpu_temp_file = "";
|
const char *cpu_temp_file = "";
|
||||||
const char *cpu_fanspeed_file;
|
const char *cpu_fanspeed_file = "";
|
||||||
char *drive_free_space[MAX_ENTRIES];
|
char *drive_free_space[MAX_ENTRIES];
|
||||||
int drive_free_space_count;
|
int drive_free_space_count;
|
||||||
const char *ttydevice = "/dev/ttyACM0";
|
const char *ttydevice = "/dev/ttyACM0";
|
||||||
const char *logfile = "";
|
|
||||||
const char *ircmd_P = ""; // power
|
const char *ircmd_P = ""; // power
|
||||||
const char *ircmd_M = ""; // mute
|
const char *ircmd_M = ""; // mute
|
||||||
const char *ircmd_m = ""; // mode
|
const char *ircmd_m = ""; // mode
|
||||||
@@ -86,6 +99,8 @@ const char *ircmd_Z = ""; // other button pressed
|
|||||||
// function prototypes
|
// function prototypes
|
||||||
void init_millis();
|
void init_millis();
|
||||||
unsigned long int millis();
|
unsigned long int millis();
|
||||||
|
char* timestamp();
|
||||||
|
bool file_exists(const char *filename);
|
||||||
int read_conf_file(int reload);
|
int read_conf_file(int reload);
|
||||||
void handle_signal(int sig);
|
void handle_signal(int sig);
|
||||||
static void daemonize();
|
static void daemonize();
|
||||||
@@ -93,28 +108,55 @@ void print_help(void);
|
|||||||
int serial_open_port();
|
int serial_open_port();
|
||||||
int listen_server();
|
int listen_server();
|
||||||
void send_stats();
|
void send_stats();
|
||||||
|
void send_settings();
|
||||||
|
void log_method();
|
||||||
|
|
||||||
// from gather_stats.c
|
// from gather_stats.c
|
||||||
void get_stats();
|
void get_stats();
|
||||||
|
|
||||||
// local functions
|
// local functions
|
||||||
void init_millis() {
|
void init_millis()
|
||||||
|
{
|
||||||
gettimeofday(&__millis_start, NULL);
|
gettimeofday(&__millis_start, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long int millis() {
|
unsigned long int millis()
|
||||||
|
{
|
||||||
long mtime, seconds, useconds;
|
long mtime, seconds, useconds;
|
||||||
struct timeval end;
|
struct timeval end;
|
||||||
gettimeofday(&end, NULL);
|
gettimeofday(&end, NULL);
|
||||||
seconds = end.tv_sec - __millis_start.tv_sec;
|
seconds = end.tv_sec - __millis_start.tv_sec;
|
||||||
useconds = end.tv_usec - __millis_start.tv_usec;
|
useconds = end.tv_usec - __millis_start.tv_usec;
|
||||||
|
|
||||||
mtime = ((seconds) * 1000 + useconds/1000.0) + 0.5;
|
mtime = ((seconds) * 1000 + useconds/1000.0) + 0.5;
|
||||||
return mtime;
|
return mtime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* timestamp()
|
||||||
|
{
|
||||||
|
unsigned size = 300;
|
||||||
|
char* buffer = malloc(size);
|
||||||
|
//char time_s;
|
||||||
|
time_t ltime; /* calendar time */
|
||||||
|
ltime=time(NULL); /* get current cal time */
|
||||||
|
//time_s = sprintf("%s",asctime( localtime(<ime) ) );
|
||||||
|
snprintf(buffer, size, "%s", asctime( localtime(<ime) ));
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool file_exists(const char *filename)
|
||||||
|
{
|
||||||
|
FILE *fp = fopen(filename, "r");
|
||||||
|
bool is_exist = false;
|
||||||
|
if(fp != NULL) {
|
||||||
|
is_exist = true;
|
||||||
|
fclose(fp); // close the file
|
||||||
|
}
|
||||||
|
return is_exist;
|
||||||
|
}
|
||||||
|
|
||||||
// read from config file
|
// read from config file
|
||||||
int read_conf_file(int reload) {
|
int read_conf_file(int reload)
|
||||||
|
{
|
||||||
int ret = -1, n = 0;
|
int ret = -1, n = 0;
|
||||||
config_t cfg;
|
config_t cfg;
|
||||||
config_setting_t *drive_free_space_entries;
|
config_setting_t *drive_free_space_entries;
|
||||||
@@ -147,22 +189,36 @@ int read_conf_file(int reload) {
|
|||||||
const char *myircmd_R;
|
const char *myircmd_R;
|
||||||
const char *myircmd_Z;
|
const char *myircmd_Z;
|
||||||
|
|
||||||
config_init(&cfg);
|
|
||||||
if(conf_file_name == NULL) {
|
if(conf_file_name == NULL) {
|
||||||
fprintf(log_stream, "Can not open configuration file %s.\n",conf_file_name);
|
syslog(LOG_INFO, "Configuration file: %s is empty or not valid.\n",conf_file_name);
|
||||||
syslog(LOG_INFO, "Can not open configuration file %s.",conf_file_name);
|
return(EXIT_FAILURE);
|
||||||
return(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// read the file. if there is an error, report it and exit
|
// check if conf file exists
|
||||||
|
if(!file_exists(conf_file_name)) {
|
||||||
|
return(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// read the file
|
||||||
|
config_init(&cfg);
|
||||||
if(!config_read_file(&cfg, conf_file_name)) {
|
if(!config_read_file(&cfg, conf_file_name)) {
|
||||||
fprintf(log_stream, "%s:%d - %s\n", config_error_file(&cfg),
|
syslog(LOG_INFO, "%s:%d - %s\n", config_error_file(&cfg),
|
||||||
config_error_line(&cfg), config_error_text(&cfg));
|
config_error_line(&cfg), config_error_text(&cfg));
|
||||||
config_destroy(&cfg);
|
config_destroy(&cfg);
|
||||||
syslog(LOG_INFO, "Can not open configuration file %s, exiting.",conf_file_name);
|
syslog(LOG_INFO, "Can not open configuration file: %s.\n",conf_file_name);
|
||||||
return(EXIT_FAILURE);
|
return(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// logfile (lookup logfile first and if found do a log_method to reload it)
|
||||||
|
if(config_lookup_string(&cfg, "logfile", &mylogfile)) {
|
||||||
|
log_file_name = strdup(mylogfile);
|
||||||
|
log_method();
|
||||||
|
fprintf(log_stream, "Config: Using 'logfile': %s\n", mylogfile);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
syslog(LOG_INFO, "No 'logfile' setting in configuration file, using default stderr output.\n");
|
||||||
|
}
|
||||||
|
|
||||||
// load the base config
|
// load the base config
|
||||||
// delay
|
// delay
|
||||||
if(config_lookup_int(&cfg, "delay", &delay)) {
|
if(config_lookup_int(&cfg, "delay", &delay)) {
|
||||||
@@ -181,15 +237,6 @@ int read_conf_file(int reload) {
|
|||||||
fprintf(log_stream, "No 'tty' setting in configuration file, using default tty of %s.\n",ttydevice);
|
fprintf(log_stream, "No 'tty' setting in configuration file, using default tty of %s.\n",ttydevice);
|
||||||
}
|
}
|
||||||
|
|
||||||
// logfile
|
|
||||||
if(config_lookup_string(&cfg, "logfile", &mylogfile)) {
|
|
||||||
logfile = strdup(mylogfile);
|
|
||||||
fprintf(log_stream, "Config: Using 'logfile': %s\n",logfile);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
fprintf(log_stream, "No 'logfile' setting in configuration file, using default stderr output.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// line_length
|
// line_length
|
||||||
if(config_lookup_int(&cfg, "line_length", &line_length)) {
|
if(config_lookup_int(&cfg, "line_length", &line_length)) {
|
||||||
fprintf(log_stream, "Config: Using 'line_length': %i\n",line_length);
|
fprintf(log_stream, "Config: Using 'line_length': %i\n",line_length);
|
||||||
@@ -206,6 +253,30 @@ int read_conf_file(int reload) {
|
|||||||
fprintf(log_stream, "No 'line_count' setting in configuration file, using default line_count of %i.\n",line_count);
|
fprintf(log_stream, "No 'line_count' setting in configuration file, using default line_count of %i.\n",line_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// led_brightness
|
||||||
|
if(config_lookup_int(&cfg, "led_brightness", &led_brightness)) {
|
||||||
|
fprintf(log_stream, "Config: Using 'led_brightness': %i\n",led_brightness);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fprintf(log_stream, "No 'led_brightness' setting in configuration file, using default led_brightness of %i.\n",led_brightness);
|
||||||
|
}
|
||||||
|
|
||||||
|
// led_delay
|
||||||
|
if(config_lookup_int(&cfg, "led_delay", &led_delay)) {
|
||||||
|
fprintf(log_stream, "Config: Using 'led_delay': %i\n",led_delay);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fprintf(log_stream, "No 'led_delay' setting in configuration file, using default led_delay of %i.\n",led_delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
// lcd_delay
|
||||||
|
if(config_lookup_int(&cfg, "lcd_delay", &lcd_delay)) {
|
||||||
|
fprintf(log_stream, "Config: Using 'lcd_delay': %i\n",lcd_delay);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fprintf(log_stream, "No 'lcd_delay' setting in configuration file, using default lcd_delay of %i.\n",lcd_delay);
|
||||||
|
}
|
||||||
|
|
||||||
// cpu stats settings
|
// cpu stats settings
|
||||||
if(config_lookup_string(&cfg, "cpu_temp_file", &mycpu_temp_file)) {
|
if(config_lookup_string(&cfg, "cpu_temp_file", &mycpu_temp_file)) {
|
||||||
cpu_temp_file = strdup(mycpu_temp_file);
|
cpu_temp_file = strdup(mycpu_temp_file);
|
||||||
@@ -277,7 +348,6 @@ void handle_signal(int sig)
|
|||||||
if(pid_fd != -1) {
|
if(pid_fd != -1) {
|
||||||
lock_result = lockf(pid_fd, F_ULOCK, 0);
|
lock_result = lockf(pid_fd, F_ULOCK, 0);
|
||||||
if(lock_result < 0) {
|
if(lock_result < 0) {
|
||||||
fprintf(log_stream,"Lockfile could not be unlocked.\n");
|
|
||||||
syslog(LOG_INFO, "Lockfile could not be unlocked.");
|
syslog(LOG_INFO, "Lockfile could not be unlocked.");
|
||||||
}
|
}
|
||||||
close(pid_fd);
|
close(pid_fd);
|
||||||
@@ -296,12 +366,10 @@ void handle_signal(int sig)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (sig == SIGHUP) {
|
else if (sig == SIGHUP) {
|
||||||
//fprintf(log_stream, "Reloading daemon config file ...\n");
|
|
||||||
syslog(LOG_INFO, "Reloading daemon config file ...");
|
syslog(LOG_INFO, "Reloading daemon config file ...");
|
||||||
read_conf_file(1);
|
read_conf_file(1);
|
||||||
}
|
}
|
||||||
else if (sig == SIGCHLD) {
|
else if (sig == SIGCHLD) {
|
||||||
//fprintf(log_stream, "Received SIGCHLD signal\n");
|
|
||||||
syslog(LOG_INFO, "Received SIGCHLD signal");
|
syslog(LOG_INFO, "Received SIGCHLD signal");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -354,7 +422,6 @@ static void daemonize()
|
|||||||
/* or another appropriated directory */
|
/* or another appropriated directory */
|
||||||
chdir_result = chdir("/");
|
chdir_result = chdir("/");
|
||||||
if(chdir_result <0) {
|
if(chdir_result <0) {
|
||||||
//fprintf(log_stream,"Could not change to our working directory.\n");
|
|
||||||
syslog(LOG_INFO, "Could not change to our working directory.");
|
syslog(LOG_INFO, "Could not change to our working directory.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -388,10 +455,8 @@ static void daemonize()
|
|||||||
/* Write PID to lockfile */
|
/* Write PID to lockfile */
|
||||||
write_result = write(pid_fd, str, strlen(str));
|
write_result = write(pid_fd, str, strlen(str));
|
||||||
if(write_result < 0) {
|
if(write_result < 0) {
|
||||||
//fprintf(log_stream,"PID could not be written to lockfile.\n");
|
|
||||||
syslog(LOG_INFO, "PID could not be written to lockfile.");
|
syslog(LOG_INFO, "PID could not be written to lockfile.");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -461,27 +526,17 @@ int serial_open_port()
|
|||||||
/* Server */
|
/* Server */
|
||||||
int listen_server()
|
int listen_server()
|
||||||
{
|
{
|
||||||
// Allocate memory for read buffer, set size according to your needs
|
|
||||||
char read_buf [2];
|
char read_buf [2];
|
||||||
|
int exec_result = 0;
|
||||||
// Normally you wouldn't do this memset() call, but since we will just receive
|
|
||||||
// ASCII data for this example, we'll set everything to 0 so we can
|
|
||||||
// call printf() easily.
|
|
||||||
memset(&read_buf, '\0', sizeof(read_buf));
|
memset(&read_buf, '\0', sizeof(read_buf));
|
||||||
|
|
||||||
// Read bytes. The behaviour of read() (e.g. does it block?,
|
|
||||||
// how long does it block for?) depends on the configuration
|
|
||||||
// settings above, specifically VMIN and VTIME
|
|
||||||
int num_bytes = read(serial_port, &read_buf, sizeof(read_buf));
|
int num_bytes = read(serial_port, &read_buf, sizeof(read_buf));
|
||||||
|
|
||||||
// n is the number of bytes read. n may be 0 if no bytes were received, and can also be -1 to signal an error.
|
// may be 0 if no bytes were received, and can also be -1 to signal an error.
|
||||||
if(num_bytes < 0) {
|
if(num_bytes < 0) {
|
||||||
fprintf(log_stream, "Error reading: %s\n", strerror(errno));
|
fprintf(log_stream, "Error reading: %s\n", strerror(errno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int exec_result = 0;
|
|
||||||
|
|
||||||
// do stuff goes here
|
// do stuff goes here
|
||||||
// switch on read_buf
|
// switch on read_buf
|
||||||
// input proto: PMmpbfe-+ru0123456789RZ
|
// input proto: PMmpbfe-+ru0123456789RZ
|
||||||
@@ -559,24 +614,44 @@ void send_stats(char *line_1, char *line_2, char *line_3)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Send settings to receiver */
|
||||||
|
// Setting Schema:
|
||||||
|
// LCDLength:LCDDelay:LEDBrightness:LEDDelay
|
||||||
|
// 16:5:1:3
|
||||||
|
|
||||||
|
void send_settings() {
|
||||||
|
char myline[16];
|
||||||
|
unsigned int mylen = 0;
|
||||||
|
int write_result = 0;
|
||||||
|
|
||||||
|
sprintf(myline,"#0%i:%i:%i:%i@",line_length,lcd_delay,led_brightness,led_delay);
|
||||||
|
mylen = strlen(myline);
|
||||||
|
write_result = write(serial_port, myline, mylen);
|
||||||
|
|
||||||
|
if(write_result < 0) {
|
||||||
|
fprintf(log_stream, "Writing settings to serial report resulted in %i error. Size of message: %i\n", write_result, mylen);
|
||||||
|
syslog(LOG_INFO, "Writing settings to serial report resulted in %i error.",write_result);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Daemon log method */
|
/* Daemon log method */
|
||||||
void log_method() {
|
void log_method() {
|
||||||
|
// close log file, if its open
|
||||||
|
if(log_stream != stderr && log_stream != NULL) {
|
||||||
|
fclose(log_stream);
|
||||||
|
}
|
||||||
|
|
||||||
// command line logfile takes precedence
|
// command line logfile takes precedence
|
||||||
if(log_file_name != NULL) {
|
if(log_file_name != NULL && file_exists(log_file_name)) {
|
||||||
log_stream = fopen(log_file_name, "a+");
|
log_stream = fopen(log_file_name, "a+");
|
||||||
if(log_stream == NULL) {
|
if(log_stream == NULL) {
|
||||||
syslog(LOG_ERR, "Can not open log file: %s, error: %s", log_file_name, strerror(errno));
|
syslog(LOG_ERR, "Can not open log file: %s, error: %s", log_file_name, strerror(errno));
|
||||||
log_stream = stderr; // stdout;
|
log_stream = stderr; // stdout;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
syslog(LOG_INFO, "Using logfile: %s\n",log_file_name);
|
||||||
|
|
||||||
// config logfile
|
|
||||||
else if(logfile != NULL) {
|
|
||||||
log_stream = fopen(logfile, "a+");
|
|
||||||
if(log_stream == NULL) {
|
|
||||||
syslog(LOG_ERR, "Can not open log file: %s, error: %s", logfile, strerror(errno));
|
|
||||||
log_stream = stderr; // stdout;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// use stderr as failback
|
// use stderr as failback
|
||||||
@@ -604,6 +679,8 @@ int main(int argc, char *argv[])
|
|||||||
char *mytty = NULL;
|
char *mytty = NULL;
|
||||||
int start_daemonized = 0;
|
int start_daemonized = 0;
|
||||||
|
|
||||||
|
//fprintf(log_stream,"Timestamp %s\n",timestamp());
|
||||||
|
|
||||||
/* Open system log and write startup message to it */
|
/* Open system log and write startup message to it */
|
||||||
openlog(argv[0], LOG_PID|LOG_CONS, LOG_DAEMON);
|
openlog(argv[0], LOG_PID|LOG_CONS, LOG_DAEMON);
|
||||||
syslog(LOG_INFO, "Started %s", app_name);
|
syslog(LOG_INFO, "Started %s", app_name);
|
||||||
@@ -612,7 +689,7 @@ int main(int argc, char *argv[])
|
|||||||
signal(SIGINT, handle_signal);
|
signal(SIGINT, handle_signal);
|
||||||
signal(SIGHUP, handle_signal);
|
signal(SIGHUP, handle_signal);
|
||||||
|
|
||||||
// define default log method
|
/* Set default log method */
|
||||||
log_method();
|
log_method();
|
||||||
|
|
||||||
/* Read configuration from config file
|
/* Read configuration from config file
|
||||||
@@ -669,6 +746,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
/* Main loop */
|
/* Main loop */
|
||||||
serial_open_port();
|
serial_open_port();
|
||||||
|
send_settings();
|
||||||
init_millis();
|
init_millis();
|
||||||
while(running == 1) {
|
while(running == 1) {
|
||||||
listen_server(); // listen for IR events (blocks for 1 second at a time)
|
listen_server(); // listen for IR events (blocks for 1 second at a time)
|
||||||
@@ -685,12 +763,12 @@ int main(int argc, char *argv[])
|
|||||||
close(serial_port);
|
close(serial_port);
|
||||||
|
|
||||||
/* Close log file, when it is used. */
|
/* Close log file, when it is used. */
|
||||||
if(log_stream != stderr) {
|
if(log_stream != stderr && log_stream != NULL) {
|
||||||
fclose(log_stream);
|
fclose(log_stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Write system log and close it. */
|
/* Write system log and close it. */
|
||||||
syslog(LOG_INFO, "Stopped %s\n", app_name);
|
syslog(LOG_INFO, "Stopped %s.\n", app_name);
|
||||||
closelog();
|
closelog();
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|||||||
Reference in New Issue
Block a user