diff --git a/ChangeLog b/ChangeLog index 626c7049..32939483 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16917,3 +16917,6 @@ wildcards". 2018-05-29 Fred Gleason * Merged pull request #000212, "Patches for building on Ubuntu 18.04". +2018-05-29 Fred Gleason + * Fixed a regression that caused meters to fail when rdvairplayd(8) + was operated with invalid channel assignments. diff --git a/lib/rdlogplay.cpp b/lib/rdlogplay.cpp index 90e63170..234ba7e2 100644 --- a/lib/rdlogplay.cpp +++ b/lib/rdlogplay.cpp @@ -200,6 +200,13 @@ int RDLogPlay::port(int channum) const } +bool RDLogPlay::channelsValid() const +{ + return (play_card[0]>=0)&&(play_card[1]>=0)&& + (play_port[0]>=0)&&(play_port[1]>=0); +} + + RDAirPlayConf::OpMode RDLogPlay::mode() const { return play_op_mode; @@ -305,10 +312,13 @@ void RDLogPlay::auditionStop() bool RDLogPlay::play(int line,RDLogLine::StartSource src, - int mport,bool skip_meta) + int mport,bool skip_meta) { QTime current_time=QTime::currentTime(); RDLogLine *logline; + if(!channelsValid()) { + return false; + } if((logline=logLine(line))==NULL) { return false; } @@ -1760,7 +1770,8 @@ void RDLogPlay::notificationReceivedData(RDNotification *notify) bool RDLogPlay::StartEvent(int line,RDLogLine::TransType trans_type, - int trans_length,RDLogLine::StartSource src,int mport,int duck_length) + int trans_length,RDLogLine::StartSource src, + int mport,int duck_length) { int running; int lines[TRANSPORT_QUANTITY]; @@ -1772,6 +1783,9 @@ bool RDLogPlay::StartEvent(int line,RDLogLine::TransType trans_type, int aport; bool was_paused=false; + if(!channelsValid()) { + return false; + } if((logline=logLine(line))==NULL) { return false; } @@ -2498,10 +2512,12 @@ void RDLogPlay::SetTransTimer(QTime current_time,bool stop) RDLogLine *logline; if(play_trans_timer->isActive()) { - if(stop) - play_trans_timer->stop(); - else + if(stop) { + play_trans_timer->stop(); + } + else { return; + } } play_trans_line=-1; for(int i=0;iairplayConf()->startRml((RDAirPlayConf::Channel)i); stop_rmls[i]=rda->airplayConf()->stopRml((RDAirPlayConf::Channel)i); } - if(air_meter_card[1]<0) { // Fixup disabled main log port 2 playout + if((air_meter_card[1]<0)||(air_meter_port[1]<0)) { // Fixup disabled main log port 2 playout air_meter_card[1]=air_meter_card[0]; air_meter_port[1]=air_meter_port[0]; cards[1]=cards[0]; @@ -753,11 +753,13 @@ MainWidget::MainWidget(QWidget *parent) } air_log_button[0]->setText(tr("Main Log\n[--]")); air_log_button[1]->setText(tr("Aux 1 Log\n[--]")); - if(!rda->airplayConf()->showAuxButton(0)) { + if((!rda->airplayConf()->showAuxButton(0))|| + (!air_log[1]->channelsValid())) { air_log_button[1]->hide(); } air_log_button[2]->setText(tr("Aux 2 Log\n[--]")); - if(!rda->airplayConf()->showAuxButton(1)) { + if((!rda->airplayConf()->showAuxButton(1))|| + (!air_log[2]->channelsValid())) { air_log_button[2]->hide(); } @@ -924,6 +926,14 @@ void MainWidget::ripcConnected(bool state) rml.setAddress(addr); rml.setEchoRequested(false); + // + // Check Channel Assignments + // + if(!air_log[0]->channelsValid()) { + QMessageBox::warning(this,"RDAirPlay - "+tr("Warning"), + tr("Main Log channel assignments are invalid!")); + } + // // Get Onair Flag State // diff --git a/rdairplay/rdairplay.pro b/rdairplay/rdairplay.pro index c3414a37..97993d3d 100644 --- a/rdairplay/rdairplay.pro +++ b/rdairplay/rdairplay.pro @@ -27,8 +27,6 @@ x11 { SOURCES += list_log.cpp SOURCES += list_logs.cpp SOURCES += local_macros.cpp - SOURCES += log_play.cpp - SOURCES += log_traffic.cpp SOURCES += loglinebox.cpp SOURCES += mode_display.cpp SOURCES += pie_counter.cpp @@ -47,8 +45,6 @@ x11 { HEADERS += lib_listview.h HEADERS += list_log.h HEADERS += list_logs.h - HEADERS += log_play.h - HEADERS += log_traffic.h HEADERS += loglinebox.h HEADERS += mode_display.h HEADERS += pie_counter.h diff --git a/rdairplay/rdairplay_cs.ts b/rdairplay/rdairplay_cs.ts index bb309517..80e73805 100644 --- a/rdairplay/rdairplay_cs.ts +++ b/rdairplay/rdairplay_cs.ts @@ -644,6 +644,14 @@ OBNOVEN Unknown command option + + Warning + + + + Main Log channel assignments are invalid! + + ModeDisplay diff --git a/rdairplay/rdairplay_de.ts b/rdairplay/rdairplay_de.ts index 86c20c89..8a99896f 100644 --- a/rdairplay/rdairplay_de.ts +++ b/rdairplay/rdairplay_de.ts @@ -644,6 +644,14 @@ AKTUALISIERT Unknown command option + + Warning + + + + Main Log channel assignments are invalid! + + ModeDisplay diff --git a/rdairplay/rdairplay_es.ts b/rdairplay/rdairplay_es.ts index 39557fa8..8db64d51 100644 --- a/rdairplay/rdairplay_es.ts +++ b/rdairplay/rdairplay_es.ts @@ -644,6 +644,14 @@ LISTA Unknown command option + + Warning + + + + Main Log channel assignments are invalid! + + ModeDisplay diff --git a/rdairplay/rdairplay_fr.ts b/rdairplay/rdairplay_fr.ts index dc6a680c..7a89f3d2 100644 --- a/rdairplay/rdairplay_fr.ts +++ b/rdairplay/rdairplay_fr.ts @@ -644,6 +644,14 @@ DU LOG Unknown command option + + Warning + + + + Main Log channel assignments are invalid! + + ModeDisplay diff --git a/rdairplay/rdairplay_nb.ts b/rdairplay/rdairplay_nb.ts index 98d03c78..45884536 100644 --- a/rdairplay/rdairplay_nb.ts +++ b/rdairplay/rdairplay_nb.ts @@ -654,6 +654,14 @@ LASTAR PÅ NYTT Unknown command option + + Warning + + + + Main Log channel assignments are invalid! + + ModeDisplay diff --git a/rdairplay/rdairplay_nn.ts b/rdairplay/rdairplay_nn.ts index 98d03c78..45884536 100644 --- a/rdairplay/rdairplay_nn.ts +++ b/rdairplay/rdairplay_nn.ts @@ -654,6 +654,14 @@ LASTAR PÅ NYTT Unknown command option + + Warning + + + + Main Log channel assignments are invalid! + + ModeDisplay diff --git a/rdairplay/rdairplay_pt_BR.ts b/rdairplay/rdairplay_pt_BR.ts index 9ecad9e9..a343840a 100644 --- a/rdairplay/rdairplay_pt_BR.ts +++ b/rdairplay/rdairplay_pt_BR.ts @@ -650,6 +650,14 @@ LISTA Unknown command option + + Warning + + + + Main Log channel assignments are invalid! + + ModeDisplay diff --git a/rdvairplayd/local_macros.cpp b/rdvairplayd/local_macros.cpp index 5d4b58a8..eca48ea0 100644 --- a/rdvairplayd/local_macros.cpp +++ b/rdvairplayd/local_macros.cpp @@ -80,10 +80,21 @@ void MainObject::rmlReceivedData(RDMacro *rml) if(rml->argQuantity()==3) { // Start Log if(rml->arg(2).toInt()size()) { if(rml->arg(2).toInt()>=0) { // Unconditional start - air_logs[index]->play(rml->arg(2).toInt(),RDLogLine::StartMacro); - rda->log(RDConfig::LogInfo,QString(). - sprintf("started log machine %d at line %d", - rml->arg(0).toInt(),rml->arg(2).toInt())); + if(air_logs[index]->play(rml->arg(2).toInt(),RDLogLine::StartMacro)) { + rda->log(RDConfig::LogInfo,QString(). + sprintf("started log machine %d at line %d", + rml->arg(0).toInt(),rml->arg(2).toInt())); + } + else { + rda->log(RDConfig::LogWarning,QString(). + sprintf("1 log machine %d failed to start", + rml->arg(0).toInt())); + if(rml->echoRequested()) { + rml->acknowledge(false); + rda->ripc()->sendRml(rml); + } + return; + } } if(rml->arg(2).toInt()==-2) { // Start if trans type allows // Find first non-running event @@ -100,10 +111,21 @@ void MainObject::rmlReceivedData(RDMacro *rml) switch(logline->transType()) { case RDLogLine::Play: case RDLogLine::Segue: - air_logs[index]->play(0,RDLogLine::StartMacro); - rda->log(RDConfig::LogInfo,QString(). - sprintf("started log machine %d at line 0", - rml->arg(0).toInt())); + if(air_logs[index]->play(0,RDLogLine::StartMacro)) { + rda->log(RDConfig::LogInfo,QString(). + sprintf("started log machine %d at line 0", + rml->arg(0).toInt())); + } + else { + rda->log(RDConfig::LogWarning,QString(). + sprintf("2 log machine %d failed to start", + rml->arg(0).toInt())); + if(rml->echoRequested()) { + rml->acknowledge(false); + rda->ripc()->sendRml(rml); + } + return; + } break; case RDLogLine::Stop: @@ -205,11 +227,19 @@ void MainObject::rmlReceivedData(RDMacro *rml) return; } if(!air_logs[index]->running()) { - if(!air_logs[index]->play(rml->arg(1).toInt(),RDLogLine::StartMacro)) { + if(air_logs[index]->play(rml->arg(1).toInt(),RDLogLine::StartMacro)) { + rda->log(RDConfig::LogInfo,QString(). + sprintf("started log machine %d at line %d", + rml->arg(0).toInt(),rml->arg(2).toInt())); + } + else { + rda->log(RDConfig::LogWarning,QString(). + sprintf("3 log machine %d failed to start", + rml->arg(0).toInt())); if(rml->echoRequested()) { rml->acknowledge(false); rda->ripc()->sendRml(rml); - } + } return; } } @@ -313,18 +343,46 @@ void MainObject::rmlReceivedData(RDMacro *rml) next_line=air_logs[index]->nextLine(); if(air_logs[index]->nextLine()>=0) { if(rml->argQuantity()==1) { - air_logs[index]-> - play(air_logs[index]->nextLine(),RDLogLine::StartMacro); + if(!air_logs[index]-> + play(air_logs[index]->nextLine(),RDLogLine::StartMacro)) { + rda->log(RDConfig::LogWarning,QString(). + sprintf("4 log machine %d failed to start", + rml->arg(0).toInt())); + if(rml->echoRequested()) { + rml->acknowledge(false); + rda->ripc()->sendRml(rml); + } + return; + } } else { if(rml->argQuantity()==2) { - air_logs[index]->play(air_logs[index]->nextLine(), - RDLogLine::StartMacro,rml->arg(1).toInt()-1); + if(!air_logs[index]->play(air_logs[index]->nextLine(), + RDLogLine::StartMacro, + rml->arg(1).toInt()-1)) { + rda->log(RDConfig::LogWarning,QString(). + sprintf("5 log machine %d failed to start", + rml->arg(0).toInt())); + if(rml->echoRequested()) { + rml->acknowledge(false); + rda->ripc()->sendRml(rml); + } + return; + } } else { - air_logs[index]-> - play(air_logs[index]->nextLine(),RDLogLine::StartMacro, - rml->arg(1).toInt()-1,rml->arg(2).toInt()); + if(!air_logs[index]-> + play(air_logs[index]->nextLine(),RDLogLine::StartMacro, + rml->arg(1).toInt()-1,rml->arg(2).toInt())) { + rda->log(RDConfig::LogWarning,QString(). + sprintf("6 log machine %d failed to start", + rml->arg(0).toInt())); + if(rml->echoRequested()) { + rml->acknowledge(false); + rda->ripc()->sendRml(rml); + } + return; + } } } rda->log(RDConfig::LogInfo,QString(). diff --git a/rdvairplayd/rdvairplayd.cpp b/rdvairplayd/rdvairplayd.cpp index b5aeb8c5..e2834f66 100644 --- a/rdvairplayd/rdvairplayd.cpp +++ b/rdvairplayd/rdvairplayd.cpp @@ -150,9 +150,17 @@ MainObject::MainObject(QObject *parent) 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); + if(rda->station()->cardDriver(cards[0])==RDStation::None) { + cards[0]=-1; + cards[1]=-1; + } 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); + if((cards[0]<0)||(ports[0]>=rda->station()->cardOutputs(cards[0]))) { + ports[0]=-1; + ports[1]=-1; + } 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); @@ -199,7 +207,7 @@ MainObject::MainObject(QObject *parent) // air_exit_timer=new QTimer(this); connect(air_exit_timer, SIGNAL(timeout()),this,SLOT(exitData())); - air_exit_timer->start(100); + air_exit_timer->start(1000); ::signal(SIGINT,SigHandler); ::signal(SIGTERM,SigHandler); }