Skip to content

Commit 6488397

Browse files
author
Holger Meyers
committed
Added Syslog logging in case of daemonizing. If started with -d the default log destination is syslog without logs are written to console
1 parent 3710e06 commit 6488397

File tree

1 file changed

+51
-17
lines changed

1 file changed

+51
-17
lines changed

PiGatewaySerial.cpp

Lines changed: 51 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <pwd.h>
3131
#include <grp.h>
3232
#include <fcntl.h>
33+
#include <syslog.h>
3334

3435
#include <RF24.h>
3536
#include <MyGateway.h>
@@ -55,15 +56,46 @@ static const char *serial_tty = _TTY_NAME;
5556
static const char *devGroupName = _TTY_GROUPNAME;
5657

5758
int daemonizeFlag = 0;
59+
60+
void openSyslog()
61+
{
62+
setlogmask(LOG_UPTO (LOG_INFO));
63+
openlog(NULL, 0, LOG_USER);
64+
}
65+
66+
void closeSyslog()
67+
{
68+
closelog();
69+
}
70+
71+
void log(int priority, const char *format, ...)
72+
{
73+
va_list argptr;
74+
va_start(argptr, format);
75+
if (daemonizeFlag == 1) {
76+
vsyslog(priority, format, argptr);
77+
} else {
78+
vprintf(format, argptr);
79+
}
80+
va_end(argptr);
81+
}
82+
5883
/*
5984
* handler for SIGINT signal
6085
*/
6186
void handle_sigint(int sig)
6287
{
63-
printf("Received SIGINT\n");
88+
log(LOG_INFO,"Received SIGINT\n");
6489
running = 0;
6590
}
6691

92+
void handle_sigusr1(int sig)
93+
{
94+
log(LOG_INFO,"Received SIGUSR1\n");
95+
int curLogLevel = setlogmask(0);
96+
if (curLogLevel != LOG_DEBUG) setlogmask(LOG_UPTO (LOG_DEBUG));
97+
else setlogmask(LOG_UPTO (LOG_INFO));
98+
}
6799

68100
/*
69101
* callback function writting data from RF24 module to the PTY
@@ -74,7 +106,7 @@ void write_msg_to_pty(char *msg)
74106

75107
if (msg == NULL)
76108
{
77-
printf("[callback] NULL msg received!\n");
109+
log(LOG_WARNING,"[callback] NULL msg received!\n");
78110
return;
79111
}
80112

@@ -154,14 +186,15 @@ int main(int argc, char **argv)
154186
break;
155187
}
156188
}
157-
158-
printf("Starting PiGatewaySerial...\n");
159-
printf("Protocol version - %s\n", LIBRARY_VERSION);
189+
openSyslog();
190+
log(LOG_INFO,"Starting PiGatewaySerial...\n");
191+
log(LOG_INFO,"Protocol version - %s\n", LIBRARY_VERSION);
160192

161193
/* register the signal handler */
162194
signal(SIGINT, handle_sigint);
163195
signal(SIGTERM, handle_sigint);
164-
196+
signal(SIGUSR1, handle_sigusr1);
197+
165198
/* create MySensors Gateway object */
166199
#ifdef __PI_BPLUS
167200
gw = new MyGateway(RPI_BPLUS_GPIO_J8_15, RPI_BPLUS_GPIO_J8_24, BCM2835_SPI_SPEED_8MHZ, 60);
@@ -170,7 +203,7 @@ int main(int argc, char **argv)
170203
#endif
171204
if (gw == NULL)
172205
{
173-
printf("Could not create MyGateway! (%d) %s\n", errno, strerror(errno));
206+
log(LOG_ERR,"Could not create MyGateway! (%d) %s\n", errno, strerror(errno));
174207
status = EXIT_FAILURE;
175208
goto cleanup;
176209
}
@@ -179,44 +212,44 @@ int main(int argc, char **argv)
179212
ret = openpty(&pty_master, &pty_slave, NULL, NULL, NULL);
180213
if (ret != 0)
181214
{
182-
printf("Could not create a PTY! (%d) %s\n", errno, strerror(errno));
215+
log(LOG_ERR,"Could not create a PTY! (%d) %s\n", errno, strerror(errno));
183216
status = EXIT_FAILURE;
184217
goto cleanup;
185218
}
186219
errno = 0;
187220
devGrp = getgrnam(devGroupName);
188221
if(devGrp == NULL)
189222
{
190-
printf("getgrnam: %s failed. (%d) %s\n", devGroupName, errno, strerror(errno));
223+
log(LOG_ERR,"getgrnam: %s failed. (%d) %s\n", devGroupName, errno, strerror(errno));
191224
status = EXIT_FAILURE;
192225
goto cleanup;
193226
}
194227
ret = chown(ttyname(pty_slave),-1,devGrp->gr_gid);
195228
if (ret == -1)
196229
{
197-
printf("chown failed. (%d) %s\n", errno, strerror(errno));
230+
log(LOG_ERR,"chown failed. (%d) %s\n", errno, strerror(errno));
198231
status = EXIT_FAILURE;
199232
goto cleanup;
200233
}
201234
ret = chmod(ttyname(pty_slave),ttyPermissions);
202235
if (ret != 0)
203236
{
204-
printf("Could not change PTY permissions! (%d) %s\n", errno, strerror(errno));
237+
log(LOG_ERR,"Could not change PTY permissions! (%d) %s\n", errno, strerror(errno));
205238
status = EXIT_FAILURE;
206239
goto cleanup;
207240
}
208-
printf("Created PTY '%s'\n", ttyname(pty_slave));
241+
log(LOG_INFO,"Created PTY '%s'\n", ttyname(pty_slave));
209242

210243
/* create a symlink with predictable name to the PTY device */
211244
unlink(serial_tty); // remove the symlink if it already exists
212245
ret = symlink(ttyname(pty_slave), serial_tty);
213246
if (ret != 0)
214247
{
215-
printf("Could not create a symlink '%s' to PTY! (%d) %s\n", serial_tty, errno, strerror(errno));
248+
log(LOG_ERR,"Could not create a symlink '%s' to PTY! (%d) %s\n", serial_tty, errno, strerror(errno));
216249
status = EXIT_FAILURE;
217250
goto cleanup;
218251
}
219-
printf("Gateway tty: %s\n", serial_tty);
252+
log(LOG_INFO,"Gateway tty: %s\n", serial_tty);
220253

221254
close(pty_slave);
222255
configure_master_fd(pty_master);
@@ -237,7 +270,7 @@ int main(int argc, char **argv)
237270
ret = poll(&fds, 1, 500);
238271
if (ret == -1)
239272
{
240-
printf("poll() error (%d) %s\n", errno, strerror(errno));
273+
log(LOG_ERR,"poll() error (%d) %s\n", errno, strerror(errno));
241274
}
242275
else if (ret == 0)
243276
{
@@ -255,7 +288,7 @@ int main(int argc, char **argv)
255288
size = read(pty_master, buff, sizeof(buff));
256289
if (size < 0)
257290
{
258-
printf("read error (%d) %s\n", errno, strerror(errno));
291+
log(LOG_ERR,"read error (%d) %s\n", errno, strerror(errno));
259292
continue;
260293
}
261294
buff[size] = '\0';
@@ -267,9 +300,10 @@ int main(int argc, char **argv)
267300

268301

269302
cleanup:
270-
printf("Exiting...\n");
303+
log(LOG_INFO,"Exiting...\n");
271304
if (gw)
272305
delete(gw);
273306
(void) unlink(serial_tty);
307+
closeSyslog();
274308
return status;
275309
}

0 commit comments

Comments
 (0)