From 4249cbdd1d40e7738fd7e9dbab4e53692d0335cd Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Thu, 17 May 2018 19:17:48 +0000 Subject: [PATCH] 2018-05-17 Fred Gleason * Fixed a bug in rdvairplay(1) that broke log chain-to events. * Enabled RLMs in rdvairplay(1). * Modified the 'rlm_test' RLM to support vLogs. --- ChangeLog | 4 ++++ lib/rdlogplay.cpp | 6 +++++ lib/rdlogplay.h | 6 ----- rdvairplay/rdvairplay.cpp | 49 +++++++++++++++++++++++++++++++++++---- rlm/rlm_test.c | 23 +++++++++++------- 5 files changed, 69 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index d71fd143..47c722e1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16830,3 +16830,7 @@ * Incremented the database version to 280. * Added a control for setting vLog start modes to the 'Log Mode Control' section of the 'Configure RDAirPlay' dialog in rdadmin(1). +2018-05-17 Fred Gleason + * Fixed a bug in rdvairplay(1) that broke log chain-to events. + * Enabled RLMs in rdvairplay(1). + * Modified the 'rlm_test' RLM to support vLogs. diff --git a/lib/rdlogplay.cpp b/lib/rdlogplay.cpp index fa8b412e..90e63170 100644 --- a/lib/rdlogplay.cpp +++ b/lib/rdlogplay.cpp @@ -34,6 +34,12 @@ #include "rdnownext.h" #include "rdsvc.h" +// +// Debug Settings +// +//#define SHOW_SLOTS +//#define SHOW_METER_SLOTS + RDLogPlay::RDLogPlay(int id,RDEventPlayer *player,QSocketDevice *nn_sock, QString logname,std::vector *rlm_hosts, QObject *parent) diff --git a/lib/rdlogplay.h b/lib/rdlogplay.h index 2b1c23f5..2123a0d0 100644 --- a/lib/rdlogplay.h +++ b/lib/rdlogplay.h @@ -49,12 +49,6 @@ #define LOGPLAY_RESCAN_INTERVAL 5000 #define LOGPLAY_RESCAN_SIZE 30 -// -// Debug Settings -// -//#define SHOW_SLOTS -//#define SHOW_METER_SLOTS - class RDLogPlay : public QObject,public RDLogEvent { Q_OBJECT diff --git a/rdvairplay/rdvairplay.cpp b/rdvairplay/rdvairplay.cpp index 04ed6038..f33552ea 100644 --- a/rdvairplay/rdvairplay.cpp +++ b/rdvairplay/rdvairplay.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -117,9 +118,12 @@ MainObject::MainObject(QObject *parent) // connect(rename_mapper,SIGNAL(mapped(int)),this,SLOT(logRenamedData(int))); QString default_svcname=rda->airplayConf()->defaultSvc(); for(int i=0;isetDefaultServiceName(default_svcname); + // + // FIXME: Add the ability to specify default carts for vLogs! + // air_logs[i]->setNowCart(rda->airplayConf()->logNowCart(i)); air_logs[i]->setNextCart(rda->airplayConf()->logNextCart(i)); reload_mapper->setMapping(air_logs[i],i); @@ -132,15 +136,52 @@ MainObject::MainObject(QObject *parent) // this,SLOT(logChannelStartedData(int,int,int,int))); // connect(air_logs[i],SIGNAL(channelStopped(int,int,int,int)), // this,SLOT(logChannelStoppedData(int,int,int,int))); - int chans[2]={0,0}; + int cards[2]={0,0}; + cards[0]=rda->airplayConf()->virtualCard(i+RD_RDVAIRPLAY_LOG_BASE); + cards[1]=rda->airplayConf()->virtualCard(i+RD_RDVAIRPLAY_LOG_BASE); int ports[2]={0,0}; + ports[0]=rda->airplayConf()->virtualPort(i+RD_RDVAIRPLAY_LOG_BASE); + ports[1]=rda->airplayConf()->virtualPort(i+RD_RDVAIRPLAY_LOG_BASE); QString start_rml[2]={"",""}; + start_rml[0]=rda->airplayConf()->virtualStartRml(i+RD_RDVAIRPLAY_LOG_BASE); + start_rml[1]=rda->airplayConf()->virtualStartRml(i+RD_RDVAIRPLAY_LOG_BASE); QString stop_rml[2]={"",""}; - air_logs[i]->setChannels(chans,ports,start_rml,stop_rml); + stop_rml[0]=rda->airplayConf()->virtualStopRml(i+RD_RDVAIRPLAY_LOG_BASE); + stop_rml[1]=rda->airplayConf()->virtualStopRml(i+RD_RDVAIRPLAY_LOG_BASE); + air_logs[i]->setChannels(cards,ports,start_rml,stop_rml); + air_logs[i]-> + setOpMode(rda->airplayConf()->opMode(i+RD_RDVAIRPLAY_LOG_BASE)); } // connect(air_logs[0],SIGNAL(transportChanged()), // this,SLOT(transportChangedData())); + // + // Load Plugins + // + QString sql; + RDSqlQuery *q; + + sql=QString("select ")+ + "PLUGIN_PATH,"+ + "PLUGIN_ARG "+ + "from NOWNEXT_PLUGINS where "+ + "(STATION_NAME=\""+RDEscapeString(rda->config()->stationName())+"\")&&"+ + "(LOG_MACHINE=0)"; + q=new RDSqlQuery(sql); + while(q->next()) { + air_plugin_hosts. + push_back(new RDRLMHost(q->value(0).toString(),q->value(1).toString(), + air_nownext_socket,this)); + rda->log(RDConfig::LogInfo,QString(). + sprintf("Loading RLM \"%s\"", + (const char *)q->value(0).toString())); + if(!air_plugin_hosts.back()->load()) { + rda->log(RDConfig::LogWarning,QString(). + sprintf("Failed to load RLM \"%s\"", + (const char *)q->value(0).toString())); + } + } + delete q; } diff --git a/rlm/rlm_test.c b/rlm/rlm_test.c index 1b759c69..3cbf4374 100644 --- a/rlm/rlm_test.c +++ b/rlm/rlm_test.c @@ -87,17 +87,22 @@ void rlm_test_RLMPadDataSent(void *ptr,const struct rlm_svc *svc, break; } switch(log->log_mach) { - case 0: - printf(" -- On Main Log ---------------------------------------------\n"); - break; + case 0: + printf(" -- On Main Log ---------------------------------------------\n"); + break; - case 1: - printf(" -- On Aux 1 Log --------------------------------------------\n"); - break; + case 1: + printf(" -- On Aux 1 Log --------------------------------------------\n"); + break; - case 2: - printf(" -- On Aux 2 Log --------------------------------------------\n"); - break; + case 2: + printf(" -- On Aux 2 Log --------------------------------------------\n"); + break; + + default: + printf(" -- On vLog %d --------------------------------------------\n", + log->log_mach+1); + break; } printf("Playing NOW\n"); printf(" Cart number: %06u\n",now->rlm_cartnum);