2019-06-17 Fred Gleason <fredg@paravelsystems.com>

* Refactored logging system to use syslog(3) exclusively.
	* Removed the 'Facility=', 'LogDirectory=', 'CoreDumpDirectory='
	and 'LogPattern=' directives from rd.conf(5).
This commit is contained in:
Fred Gleason
2019-06-17 17:46:26 -04:00
parent 5d7e82e540
commit a094fbc788
67 changed files with 934 additions and 1441 deletions

View File

@@ -20,6 +20,7 @@
#include <math.h>
#include <signal.h>
#include <syslog.h>
#include <samplerate.h>
@@ -72,9 +73,8 @@ void *AlsaCaptureCallback(void *ptr)
(!alsa_format->exiting))||(s<0)) {
snd_pcm_drop (alsa_format->pcm);
snd_pcm_prepare(alsa_format->pcm);
rd_config->log("caed",RDConfig::LogNotice,QString().
sprintf("****** ALSA Capture Xrun - Card: %d ******",
alsa_format->card));
syslog(LOG_DEBUG,"****** ALSA Capture Xrun - Card: %d ******",
alsa_format->card);
}
else {
switch(alsa_format->format) {
@@ -510,21 +510,18 @@ void *AlsaPlayCallback(void *ptr)
int s=snd_pcm_writei(alsa_format->pcm,alsa_format->card_buffer,n);
if(s!=n) {
if(s<0) {
rd_config->log("caed",RDConfig::LogNotice,
QString().sprintf("*** alsa error %d: %s",-s,snd_strerror(s)));
syslog(LOG_WARNING,"*** alsa error %d: %s",-s,snd_strerror(s));
}
else {
rd_config->log("caed",RDConfig::LogNotice,
QString().sprintf("period size mismatch - wrote %d\n",s));
syslog(LOG_WARNING,"period size mismatch - wrote %d",s);
}
}
if((snd_pcm_state(alsa_format->pcm)!=SND_PCM_STATE_RUNNING)&&
(!alsa_format->exiting)) {
snd_pcm_drop (alsa_format->pcm);
snd_pcm_prepare(alsa_format->pcm);
rd_config->log("caed",RDConfig::LogNotice,QString().
sprintf("****** ALSA Playout Xrun - Card: %d ******",
alsa_format->card));
syslog(LOG_DEBUG,"****** ALSA Playout Xrun - Card: %d ******",
alsa_format->card);
}
}
@@ -570,7 +567,6 @@ void MainObject::AlsaInitCallback()
void MainObject::alsaStopTimerData(int cardstream)
{
rd_config->log("caed",RDConfig::LogErr,QString().sprintf("alsaStopTimerData(%d)",cardstream));
#ifdef ALSA
int card=cardstream/RD_MAX_STREAMS;
int stream=cardstream-card*RD_MAX_STREAMS;
@@ -603,7 +599,7 @@ void MainObject::alsaFadeTimerData(int cardstream)
alsa_fade_timer[card][stream]->stop();
}
}
rd_config->log("caed",RDConfig::LogDebug,QString().sprintf("FadeLevel: %d",level));
syslog(LOG_DEBUG,"FadeLevel: %d",level);
alsaSetOutputVolume(card,stream,alsa_fade_port[card][stream],level);
#endif // ALSA
}
@@ -723,9 +719,8 @@ void MainObject::alsaInit(RDStation *station)
if(cae_driver[i]==RDStation::Alsa) {
station->setCardDriver(i,RDStation::Alsa);
if(snd_ctl_open(&snd_ctl,dev,0)<0) {
rd_config->log("caed",RDConfig::LogNotice,QString().
sprintf("no control device found for %s",
(const char *)dev));
syslog(LOG_DEBUG,"no control device found for %s",
(const char *)dev);
station->
setCardName(i,
QString().sprintf("ALSA Device %s",(const char *)dev));
@@ -783,17 +778,14 @@ bool MainObject::alsaLoadPlayback(int card,QString wavename,int *stream)
{
#ifdef ALSA
if(alsa_play_format[card].exiting||((*stream=GetAlsaOutputStream(card))<0)) {
rd_config->log("caed",RDConfig::LogErr,QString().sprintf(
"Error: alsaLoadPlayback(%s) GetAlsaOutputStream():%d < 0",
(const char *) wavename,
*stream) );
syslog(LOG_WARNING,"alsaLoadPlayback(%s) GetAlsaOutputStream():%d < 0",
(const char *)wavename.toUtf8(),*stream);
return false;
}
alsa_play_wave[card][*stream]=new RDWaveFile(wavename);
if(!alsa_play_wave[card][*stream]->openWave()) {
rd_config->log("caed",RDConfig::LogErr,QString().sprintf(
"Error: alsaLoadPlayback(%s) openWave() failed to open file",
(const char *) wavename) );
syslog(LOG_WARNING,"alsaLoadPlayback(%s) openWave() failed to open file",
(const char *)wavename.toUtf8());
delete alsa_play_wave[card][*stream];
alsa_play_wave[card][*stream]=NULL;
FreeAlsaOutputStream(card,*stream);
@@ -810,11 +802,11 @@ bool MainObject::alsaLoadPlayback(int card,QString wavename,int *stream)
break;
default:
rd_config->log("caed",RDConfig::LogErr,QString().sprintf(
"Error: alsaLoadPlayback(%s) getFormatTag()%d || getBistsPerSample()%d failed",
(const char *) wavename,
syslog(LOG_WARNING,
"alsaLoadPlayback(%s) getFormatTag()%d || getBistsPerSample()%d failed",
(const char *)wavename.toUtf8(),
alsa_play_wave[card][*stream]->getFormatTag(),
alsa_play_wave[card][*stream]->getBitsPerSample() ));
alsa_play_wave[card][*stream]->getBitsPerSample());
delete alsa_play_wave[card][*stream];
alsa_play_wave[card][*stream]=NULL;
FreeAlsaOutputStream(card,*stream);
@@ -998,9 +990,9 @@ bool MainObject::alsaLoadRecord(int card,int stream,int coding,int chans,
break;
default:
rd_config->log("caed",RDConfig::LogErr,QString().
sprintf("requested unsupported channel count %d, card: %d, stream: %d",
chans,card,stream));
syslog(LOG_WARNING,
"requested unsupported channel count %d, card: %d, stream: %d",
chans,card,stream);
delete alsa_record_wave[card][stream];
alsa_record_wave[card][stream]=NULL;
return false;
@@ -1026,9 +1018,9 @@ bool MainObject::alsaLoadRecord(int card,int stream,int coding,int chans,
break;
default:
rd_config->log("caed",RDConfig::LogErr,QString().
sprintf("requested invalid audio encoding %d, card: %d, stream: %d",
coding,card,stream));
syslog(LOG_WARNING,
"requested invalid audio encoding %d, card: %d, stream: %d",
coding,card,stream);
delete alsa_record_wave[card][stream];
alsa_record_wave[card][stream]=NULL;
return false;
@@ -1366,17 +1358,16 @@ bool MainObject::AlsaStartCaptureDevice(QString &dev,int card,snd_pcm_t *pcm)
snd_pcm_hw_params_alloca(&hwparams);
snd_pcm_hw_params_any(pcm,hwparams);
rd_config->log("caed",RDConfig::LogInfo,QString().
sprintf("Starting ALSA Capture Device %s:",
(const char *)dev));
syslog(LOG_INFO,"Starting ALSA Capture Device %s:",
(const char *)dev.toUtf8());
//
// Access Type
//
if(snd_pcm_hw_params_test_access(pcm,hwparams,
SND_PCM_ACCESS_RW_INTERLEAVED)<0) {
rd_config->log("caed",RDConfig::LogErr," Interleaved access not supported,");
rd_config->log("caed",RDConfig::LogErr," aborting initialization of device.");
syslog(LOG_WARNING," Interleaved access not supported,");
syslog(LOG_WARNING," aborting initialization of device.");
return false;
}
snd_pcm_hw_params_set_access(pcm,hwparams,SND_PCM_ACCESS_RW_INTERLEAVED);
@@ -1386,18 +1377,18 @@ bool MainObject::AlsaStartCaptureDevice(QString &dev,int card,snd_pcm_t *pcm)
//
if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S32_LE)==0) {
alsa_capture_format[card].format=SND_PCM_FORMAT_S32_LE;
rd_config->log("caed",RDConfig::LogDebug," Format = 32 bit little-endian");
syslog(LOG_INFO," Format = 32 bit little-endian");
}
else {
if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S16_LE)==0) {
alsa_capture_format[card].format=SND_PCM_FORMAT_S16_LE;
rd_config->log("caed",RDConfig::LogDebug," Format = 16 bit little-endian");
syslog(LOG_INFO," Format = 16 bit little-endian");
}
else {
rd_config->log("caed",RDConfig::LogErr,
" Neither 16 nor 32 bit little-endian formats available,");
rd_config->log("caed",RDConfig::LogErr,
" aborting initialization of device.");
syslog(LOG_WARNING,
" Neither 16 nor 32 bit little-endian formats available,");
syslog(LOG_WARNING,
" aborting initialization of device.");
return false;
}
}
@@ -1415,14 +1406,13 @@ bool MainObject::AlsaStartCaptureDevice(QString &dev,int card,snd_pcm_t *pcm)
snd_pcm_hw_params_set_rate_near(pcm,hwparams,&sr,&dir);
if((sr<(system_sample_rate-RD_ALSA_SAMPLE_RATE_TOLERANCE))||
(sr>(system_sample_rate+RD_ALSA_SAMPLE_RATE_TOLERANCE))) {
rd_config->log("caed",RDConfig::LogErr,
QString().sprintf(" Asked for sample rate %u, got %u",
system_sample_rate,sr));
rd_config->log("caed",RDConfig::LogErr," Sample rate unsupported by device");
syslog(LOG_WARNING," Asked for sample rate %u, got %u",
system_sample_rate,sr);
syslog(LOG_WARNING," Sample rate unsupported by device");
return false;
}
alsa_capture_format[card].sample_rate=sr;
rd_config->log("caed",RDConfig::LogNotice,QString().sprintf(" SampleRate = %u",sr));
syslog(LOG_INFO," SampleRate = %u",sr);
//
// Channels
@@ -1436,9 +1426,8 @@ bool MainObject::AlsaStartCaptureDevice(QString &dev,int card,snd_pcm_t *pcm)
snd_pcm_hw_params_set_channels_near(pcm,hwparams,
&alsa_capture_format[card].channels);
alsa_play_format[card].capture_channels=alsa_capture_format[card].channels;
rd_config->log("caed",RDConfig::LogDebug,QString().
sprintf(" Aggregate Channels = %u",
alsa_capture_format[card].channels));
syslog(LOG_INFO," Aggregate Channels = %u",
alsa_capture_format[card].channels);
//
// Buffer Size
@@ -1446,25 +1435,23 @@ bool MainObject::AlsaStartCaptureDevice(QString &dev,int card,snd_pcm_t *pcm)
alsa_capture_format[card].periods=rd_config->alsaPeriodQuantity();
snd_pcm_hw_params_set_periods_near(pcm,hwparams,
&alsa_capture_format[card].periods,&dir);
rd_config->log("caed",RDConfig::LogDebug,QString().sprintf(" Periods = %u",
alsa_capture_format[card].periods));
syslog(LOG_INFO," Periods = %u",alsa_capture_format[card].periods);
alsa_capture_format[card].buffer_size=
alsa_capture_format[card].periods*rd_config->alsaPeriodSize();
snd_pcm_hw_params_set_buffer_size_near(pcm,hwparams,
&alsa_capture_format[card].buffer_size);
rd_config->log("caed",RDConfig::LogDebug,QString().sprintf(" BufferSize = %u frames",
(unsigned)alsa_capture_format[card].buffer_size));
syslog(LOG_INFO," BufferSize = %u frames",
(unsigned)alsa_capture_format[card].buffer_size);
//
// Fire It Up
//
if((err=snd_pcm_hw_params(pcm,hwparams))<0) {
rd_config->log("caed",RDConfig::LogErr,QString().sprintf(" Device Error: %s,",
(const char *)snd_strerror(err)));
rd_config->log("caed",RDConfig::LogErr," aborting initialization of device.");
syslog(LOG_WARNING," Device Error: %s,",snd_strerror(err));
syslog(LOG_WARNING," aborting initialization of device.");
return false;
}
rd_config->log("caed",RDConfig::LogNotice," Device started successfully");
syslog(LOG_INFO," Device started successfully");
switch(alsa_capture_format[card].format) {
case SND_PCM_FORMAT_S16_LE:
alsa_capture_format[card].card_buffer_size=
@@ -1494,9 +1481,8 @@ bool MainObject::AlsaStartCaptureDevice(QString &dev,int card,snd_pcm_t *pcm)
snd_pcm_sw_params_current(pcm,swparams);
snd_pcm_sw_params_set_avail_min(pcm,swparams,rd_config->alsaPeriodSize());
if((err=snd_pcm_sw_params(pcm,swparams))<0) {
rd_config->log("caed",RDConfig::LogErr,QString().sprintf("ALSA Device %s: %s",
(const char *)dev,
(const char *)snd_strerror(err)));
syslog(LOG_WARNING,"ALSA Device %s: %s",(const char *)dev.toUtf8(),
snd_strerror(err));
return false;
}
@@ -1530,16 +1516,16 @@ bool MainObject::AlsaStartPlayDevice(QString &dev,int card,snd_pcm_t *pcm)
snd_pcm_hw_params_alloca(&hwparams);
snd_pcm_hw_params_any(pcm,hwparams);
rd_config->log("caed",RDConfig::LogNotice,QString().sprintf("Starting ALSA Play Device %s:",
(const char *)dev));
syslog(LOG_INFO,"Starting ALSA Play Device %s:",
(const char *)dev.toUtf8());
//
// Access Type
//
if(snd_pcm_hw_params_test_access(pcm,hwparams,
SND_PCM_ACCESS_RW_INTERLEAVED)<0) {
rd_config->log("caed",RDConfig::LogErr," Interleaved access not supported,");
rd_config->log("caed",RDConfig::LogErr," aborting initialization of device.");
syslog(LOG_WARNING," Interleaved access not supported,");
syslog(LOG_WARNING," aborting initialization of device.");
return false;
}
snd_pcm_hw_params_set_access(pcm,hwparams,SND_PCM_ACCESS_RW_INTERLEAVED);
@@ -1549,17 +1535,17 @@ bool MainObject::AlsaStartPlayDevice(QString &dev,int card,snd_pcm_t *pcm)
//
if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S32_LE)==0) {
alsa_play_format[card].format=SND_PCM_FORMAT_S32_LE;
rd_config->log("caed",RDConfig::LogDebug," Format = 32 bit little-endian");
syslog(LOG_INFO," Format = 32 bit little-endian");
}
else {
if(snd_pcm_hw_params_test_format(pcm,hwparams,SND_PCM_FORMAT_S16_LE)==0) {
alsa_play_format[card].format=SND_PCM_FORMAT_S16_LE;
rd_config->log("caed",RDConfig::LogDebug," Format = 16 bit little-endian");
syslog(LOG_INFO," Format = 16 bit little-endian");
}
else {
rd_config->log("caed",RDConfig::LogErr,
" Neither 16 nor 32 bit little-endian formats available,");
rd_config->log("caed",RDConfig::LogErr," aborting initialization of device.");
syslog(LOG_WARNING,
" Neither 16 nor 32 bit little-endian formats available,");
syslog(LOG_WARNING," aborting initialization of device.");
return false;
}
}
@@ -1572,14 +1558,13 @@ bool MainObject::AlsaStartPlayDevice(QString &dev,int card,snd_pcm_t *pcm)
snd_pcm_hw_params_set_rate_near(pcm,hwparams,&sr,&dir);
if((sr<(system_sample_rate-RD_ALSA_SAMPLE_RATE_TOLERANCE))||
(sr>(system_sample_rate+RD_ALSA_SAMPLE_RATE_TOLERANCE))) {
rd_config->log("caed",RDConfig::LogErr,
QString().sprintf(" Asked for sample rate %u, got %u",
system_sample_rate,sr));
rd_config->log("caed",RDConfig::LogErr," Sample rate unsupported by device");
syslog(LOG_WARNING," Asked for sample rate %u, got %u",
system_sample_rate,sr);
syslog(LOG_WARNING," Sample rate unsupported by device");
return false;
}
alsa_play_format[card].sample_rate=sr;
rd_config->log("caed",RDConfig::LogDebug,QString().sprintf(" SampleRate = %u",sr));
syslog(LOG_INFO," SampleRate = %u",sr);
//
// Channels
@@ -1592,35 +1577,30 @@ bool MainObject::AlsaStartPlayDevice(QString &dev,int card,snd_pcm_t *pcm)
}
snd_pcm_hw_params_set_channels_near(pcm,hwparams,
&alsa_play_format[card].channels);
rd_config->log("caed",RDConfig::LogDebug,QString().sprintf(" Aggregate Channels = %u",
alsa_play_format[card].channels));
syslog(LOG_INFO," Aggregate Channels = %u",alsa_play_format[card].channels);
//
// Buffer Size
//
alsa_play_format[card].periods=rd_config->alsaPeriodQuantity();
snd_pcm_hw_params_set_periods_near(pcm,hwparams,
&alsa_play_format[card].periods,&dir);
rd_config->log("caed",RDConfig::LogDebug,QString().sprintf(" Periods = %u",
alsa_play_format[card].periods));
syslog(LOG_INFO," Periods = %u",alsa_play_format[card].periods);
alsa_play_format[card].buffer_size=
alsa_play_format[card].periods*rd_config->alsaPeriodSize();
snd_pcm_hw_params_set_buffer_size_near(pcm,hwparams,
&alsa_play_format[card].buffer_size);
rd_config->log("caed",RDConfig::LogDebug,QString().
sprintf(" BufferSize = %u frames",
(unsigned)alsa_play_format[card].buffer_size));
syslog(LOG_INFO," BufferSize = %u frames",
(unsigned)alsa_play_format[card].buffer_size);
//
// Fire It Up
//
if((err=snd_pcm_hw_params(pcm,hwparams))<0) {
rd_config->log("caed",RDConfig::LogErr,QString().sprintf(" Device Error: %s,",
(const char *)snd_strerror(err)));
rd_config->log("caed",RDConfig::LogErr," aborting initialization of device.");
syslog(LOG_WARNING," Device Error: %s,",snd_strerror(err));
syslog(LOG_ERR," aborting initialization of device.");
return false;
}
rd_config->log("caed",RDConfig::LogNotice," Device started successfully");
syslog(LOG_INFO," Device started successfully");
switch(alsa_play_format[card].format) {
case SND_PCM_FORMAT_S16_LE:
alsa_play_format[card].card_buffer_size=
@@ -1649,9 +1629,8 @@ bool MainObject::AlsaStartPlayDevice(QString &dev,int card,snd_pcm_t *pcm)
snd_pcm_sw_params_current(pcm,swparams);
snd_pcm_sw_params_set_avail_min(pcm,swparams,rd_config->alsaPeriodSize());
if((err=snd_pcm_sw_params(pcm,swparams))<0) {
rd_config->log("caed",RDConfig::LogErr,QString().sprintf("ALSA Device %s: %s",
(const char *)dev,
(const char *)snd_strerror(err)));
syslog(LOG_WARNING,"ALSA Device %s: %s",
(const char *)dev.toUtf8(),snd_strerror(err));
return false;
}
@@ -1741,8 +1720,8 @@ void MainObject::WriteAlsaBuffer(int card,int stream,int16_t *buffer,unsigned le
alsa_record_wave[card][stream]->writeWave(mpeg,s);
}
else {
rd_config->log("caed",RDConfig::LogErr,QString().
sprintf("TwoLAME encode error, card: %d, stream: %d",card,stream));
syslog(LOG_WARNING,"TwoLAME encode error, card: %d, stream: %d",
card,stream);
}
}
#endif // HAVE_TWOLAME