From 96fdfff8a04c50356f93e4089e6a388f20dd62a7 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Mon, 11 Jun 2018 15:59:05 +0000 Subject: [PATCH 1/4] 2018-06-11 Fred Gleason * Added a 'STATIONS.JACK_PORT' field to the database. * Incremented the database version to 287. * Added an 'Initial Audio Ports' control to the 'JACK Configuration' dialog in rdadmin(1). * Implemented 'Activate JACK Port' ['JA'] and 'Remove JACK Port' ['JR'] RMLs. --- ChangeLog | 7 + cae/cae_jack.cpp | 300 ++++++++++++++++++--------------- docs/apis/cae.xml | 50 ++++++ docs/opsguide/rml.xml | 60 +++++++ docs/tables/stations.txt | 1 + lib/dbversion.h | 2 +- lib/rdmacro.cpp | 2 + lib/rdmacro.h | 18 +- lib/rdstation.cpp | 46 +++-- lib/rdstation.h | 2 + rdadmin/edit_jack.cpp | 21 ++- rdadmin/edit_jack.h | 17 +- rdadmin/rdadmin_cs.ts | 4 + rdadmin/rdadmin_de.ts | 4 + rdadmin/rdadmin_es.ts | 4 + rdadmin/rdadmin_fr.ts | 4 + rdadmin/rdadmin_nb.ts | 4 + rdadmin/rdadmin_nn.ts | 4 + rdadmin/rdadmin_pt_BR.ts | 4 + utils/rddbmgr/rddbmgr.cpp | 2 +- utils/rddbmgr/revertschema.cpp | 19 +++ utils/rddbmgr/schemamap.cpp | 2 +- utils/rddbmgr/updateschema.cpp | 11 ++ 23 files changed, 410 insertions(+), 178 deletions(-) diff --git a/ChangeLog b/ChangeLog index d1fa8a4e..42a53ba6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -17040,3 +17040,10 @@ reversion to an implied schema. 2018-06-08 Fred Gleason * Fixed typos in the rddbmgr(8) man page. +2018-06-11 Fred Gleason + * Added a 'STATIONS.JACK_PORT' field to the database. + * Incremented the database version to 287. + * Added an 'Initial Audio Ports' control to the 'JACK Configuration' + dialog in rdadmin(1). + * Implemented 'Activate JACK Port' ['JA'] and 'Remove JACK Port' ['JR'] + RMLs. diff --git a/cae/cae_jack.cpp b/cae/cae_jack.cpp index d5afd945..0b64e7bf 100644 --- a/cae/cae_jack.cpp +++ b/cae/cae_jack.cpp @@ -41,8 +41,6 @@ jack_client_t *jack_client; RDMeterAverage *jack_input_meter[RD_MAX_PORTS][2]; RDMeterAverage *jack_output_meter[RD_MAX_PORTS][2]; RDMeterAverage *jack_stream_output_meter[RD_MAX_STREAMS][2]; -//volatile jack_default_audio_sample_t jack_input_meter[RD_MAX_PORTS][2]; -//volatile jack_default_audio_sample_t jack_output_meter[RD_MAX_PORTS][2]; volatile jack_default_audio_sample_t jack_input_volume[RD_MAX_PORTS]; volatile jack_default_audio_sample_t @@ -87,10 +85,14 @@ int JackProcess(jack_nframes_t nframes, void *arg) // for(int i=0;i0.0) { for(int k=0;k<2;k++) { - for(unsigned l=0;l - write((char *)jack_callback_buffer, - nframes*sizeof(jack_default_audio_sample_t))/ - sizeof(jack_default_audio_sample_t); - break; + if(jack_input_port[i][0]!=NULL) { + if(jack_recording[i]) { + switch(jack_input_channels[i]) { + case 1: // mono + for(unsigned j=0;j + write((char *)jack_callback_buffer, + nframes*sizeof(jack_default_audio_sample_t))/ + sizeof(jack_default_audio_sample_t); + break; - case 2: // stereo - for(unsigned j=0;j - write((char *)jack_callback_buffer, - 2*nframes*sizeof(jack_default_audio_sample_t))/ - (2*sizeof(jack_default_audio_sample_t)); - break; + case 2: // stereo + for(unsigned j=0;j + write((char *)jack_callback_buffer, + 2*nframes*sizeof(jack_default_audio_sample_t))/ + (2*sizeof(jack_default_audio_sample_t)); + break; + } } } } @@ -229,37 +237,39 @@ int JackProcess(jack_nframes_t nframes, void *arg) break; } for(int j=0;j0.0) { - switch(jack_output_channels[i]) { - case 1: - for(unsigned k=0;k0.0) { + switch(jack_output_channels[i]) { + case 1: + for(unsigned k=0;kin_meter[1]) - in_meter[1]=jack_input_buffer[i][1][k]; - break; - case 2: // L only - if(jack_input_buffer[i][0][k]>in_meter[0]) - in_meter[0]=jack_input_buffer[i][0][k]; - break; - case 1: // swap - if(jack_input_buffer[i][0][k]>in_meter[1]) - in_meter[1]=jack_input_buffer[i][0][k]; - if(jack_input_buffer[i][1][k]>in_meter[0]) - in_meter[0]=jack_input_buffer[i][1][k]; - break; - case 0: // normal - default: - if(jack_input_buffer[i][0][k]>in_meter[0]) - in_meter[0]=jack_input_buffer[i][0][k]; - if(jack_input_buffer[i][1][k]>in_meter[1]) - in_meter[1]=jack_input_buffer[i][1][k]; - break; - } - } // for nframes - jack_input_meter[i][0]->addValue(in_meter[0]); - jack_input_meter[i][1]->addValue(in_meter[1]); - - // output meters - for(int j=0;j<2;j++) { - out_meter[j]=0.0; + if(jack_input_port[i][0]!=NULL) { + // input meters (taking input mode into account) + in_meter[0]=0.0; + in_meter[1]=0.0; for(unsigned k=0;kout_meter[j]) - out_meter[j]=jack_output_buffer[i][j][k]; - } - jack_output_meter[i][j]->addValue(out_meter[j]); + switch(jack_input_mode[jack_card_process][i]) { + case 3: // R only + if(jack_input_buffer[i][1][k]>in_meter[1]) + in_meter[1]=jack_input_buffer[i][1][k]; + break; + case 2: // L only + if(jack_input_buffer[i][0][k]>in_meter[0]) + in_meter[0]=jack_input_buffer[i][0][k]; + break; + case 1: // swap + if(jack_input_buffer[i][0][k]>in_meter[1]) + in_meter[1]=jack_input_buffer[i][0][k]; + if(jack_input_buffer[i][1][k]>in_meter[0]) + in_meter[0]=jack_input_buffer[i][1][k]; + break; + case 0: // normal + default: + if(jack_input_buffer[i][0][k]>in_meter[0]) + in_meter[0]=jack_input_buffer[i][0][k]; + if(jack_input_buffer[i][1][k]>in_meter[1]) + in_meter[1]=jack_input_buffer[i][1][k]; + break; + } + } // for nframes + jack_input_meter[i][0]->addValue(in_meter[0]); + jack_input_meter[i][1]->addValue(in_meter[1]); + } + if(jack_output_port[i][0]!=NULL) { + // output meters + for(int j=0;j<2;j++) { + out_meter[j]=0.0; + for(unsigned k=0;kout_meter[j]) + out_meter[j]=jack_output_buffer[i][j][k]; + } + jack_output_meter[i][j]->addValue(out_meter[j]); + } } - } // for RD_MAX_PORTS return 0; } @@ -416,6 +428,7 @@ void MainObject::jackRecordTimerData(int stream) void MainObject::jackClientStartData() { +#ifdef JACK QString sql=QString("select DESCRIPTION,COMMAND_LINE from JACK_CLIENTS where ")+ "STATION_NAME=\""+RDEscapeString(rd_config->stationName())+"\""; RDSqlQuery *q=new RDSqlQuery(sql); @@ -434,6 +447,7 @@ void MainObject::jackClientStartData() sleep(1); } delete q; +#endif // JACK } @@ -629,6 +643,12 @@ void MainObject::jackInit(RDStation *station) // Register Ports // for(int i=0;ijackPorts();i++) { name=QString().sprintf("playout_%dL",i); jack_output_port[i][0]= jack_port_register(jack_client,(const char *)name, diff --git a/docs/apis/cae.xml b/docs/apis/cae.xml index f26ee313..b944335e 100644 --- a/docs/apis/cae.xml +++ b/docs/apis/cae.xml @@ -1385,6 +1385,31 @@ JACK Operations + + <command>Activate Port</command> + + Add a complementary pair of JACK ports (input and output) to the + JACK graph, at the port position indicated by + port. If the ports are already active, do + nothing. + + + JA num! + + + + + num + + + + The port position to which to associate the added port. + + + + + + <command>Connect Ports</command> @@ -1452,6 +1477,31 @@ + + + <command>Remove Port</command> + + Remove a complementary pair of JACK ports (input and output) from the + JACK graph, at the port position indicated by + port. If the ports are not active, do + nothing. + + + JR num! + + + + + num + + + + The port position to which to associate the added port. + + + + + diff --git a/docs/opsguide/rml.xml b/docs/opsguide/rml.xml index d82c8ed1..4fc6cc16 100644 --- a/docs/opsguide/rml.xml +++ b/docs/opsguide/rml.xml @@ -171,6 +171,36 @@ Commands + + Activate Jack Port [JA] + + + + Module + caed8 + + + Mnemonic + JA + + + + + Activate an audio port to the JACK processing graph. + + + JA + num! + + + Activate port num in the JACK graph, causing + new playout and captures ports corresponding to + num to be added to the JACK graph. + num must be an integer between + 1 and 24 inclusive. + + + Air Gate [AG] @@ -1359,6 +1389,36 @@ + + Remove Jack Port [JR] + + + + Module + caed8 + + + Mnemonic + JR + + + + + Remove an audio port from the JACK processing graph. + num must be an integer between + 1 and 24 inclusive. + + + JR + num! + + + Deactivate port num in the JACK graph, causing + new playout and captures ports corresponding to + num to be removed from the JACK graph. + + + Run Shell Command [RN] diff --git a/docs/tables/stations.txt b/docs/tables/stations.txt index 0873add9..d10ca825 100644 --- a/docs/tables/stations.txt +++ b/docs/tables/stations.txt @@ -25,6 +25,7 @@ FILTER_MODE int(11) 0=Synchronous, 1=Asynchronous START_JACK enum('Y','N') JACK_SERVER_NAME char(64) JACK_COMMAND_LINE char(255) +JACK_PORTS int(11) signed CUE_CARD int(11) signed CUE_PORT int(11) signed CUE_START_CART int(10) unsigned diff --git a/lib/dbversion.h b/lib/dbversion.h index d9687287..86c42fb0 100644 --- a/lib/dbversion.h +++ b/lib/dbversion.h @@ -24,7 +24,7 @@ /* * Current Database Version */ -#define RD_VERSION_DATABASE 286 +#define RD_VERSION_DATABASE 287 #endif // DBVERSION_H diff --git a/lib/rdmacro.cpp b/lib/rdmacro.cpp index 5e991711..ce4a0843 100644 --- a/lib/rdmacro.cpp +++ b/lib/rdmacro.cpp @@ -178,8 +178,10 @@ bool RDMacro::parseString(const char *str,int n) case RDMacro::GE: case RDMacro::GI: case RDMacro::GO: + case RDMacro::JA: case RDMacro::JC: case RDMacro::JD: + case RDMacro::JR: case RDMacro::LB: case RDMacro::LC: case RDMacro::LL: diff --git a/lib/rdmacro.h b/lib/rdmacro.h index d5d8a5c9..5d25b39f 100644 --- a/lib/rdmacro.h +++ b/lib/rdmacro.h @@ -37,15 +37,15 @@ class RDMacro public: enum Command {AG=0x4147,AL=0x414C,BO=0x424F,CC=0x4343,CE=0x4345,CL=0x434C, CP=0x4350,DB=0x4442,DL=0x444C,DP=0x4450,DS=0x4453,DX=0x4458, - EX=0x4558,FS=0x4653,GE=0x4745,GI=0x4749,GO=0x474F,JC=0x4A43, - JD=0x4A44,LB=0x4C42,LC=0x4C43,LL=0x4C4C,LO=0x4C4F,MB=0x4D42, - MD=0x4D44,MN=0x4D4E,MT=0x4D54,NN=0x4E4E,PB=0x5042,PC=0x5043, - PD=0x5044,PE=0x5045,PL=0x504C,PM=0x504D,PN=0x504E,PP=0x5050, - PS=0x5053,PT=0x5054,PU=0x5055,PW=0x5057,PX=0x5058,RL=0x524C, - RN=0x524E,RS=0x5253,RR=0x5252,SA=0x5341,SC=0x5343,SD=0x5344, - SG=0x5347,SI=0x5349,SL=0x534C,SN=0x534e,SO=0x534F,SP=0x5350, - SR=0x5352,ST=0x5354,SX=0x5358,SY=0x5359,SZ=0x535A,TA=0x5441, - UO=0x554F}; + EX=0x4558,FS=0x4653,GE=0x4745,GI=0x4749,GO=0x474F,JA=0x4A41, + JC=0x4A43,JD=0x4A44,JR=0x4A52,LB=0x4C42,LC=0x4C43,LL=0x4C4C, + LO=0x4C4F,MB=0x4D42,MD=0x4D44,MN=0x4D4E,MT=0x4D54,NN=0x4E4E, + PB=0x5042,PC=0x5043,PD=0x5044,PE=0x5045,PL=0x504C,PM=0x504D, + PN=0x504E,PP=0x5050,PS=0x5053,PT=0x5054,PU=0x5055,PW=0x5057, + PX=0x5058,RL=0x524C,RN=0x524E,RS=0x5253,RR=0x5252,SA=0x5341, + SC=0x5343,SD=0x5344,SG=0x5347,SI=0x5349,SL=0x534C,SN=0x534e, + SO=0x534F,SP=0x5350,SR=0x5352,ST=0x5354,SX=0x5358,SY=0x5359, + SZ=0x535A,TA=0x5441,UO=0x554F}; enum Role {Invalid=0,Cmd=1,Reply=2}; RDMacro(); RDMacro::Role role() const; diff --git a/lib/rdstation.cpp b/lib/rdstation.cpp index 42484263..be6850bc 100644 --- a/lib/rdstation.cpp +++ b/lib/rdstation.cpp @@ -336,6 +336,18 @@ void RDStation::setJackCommandLine(const QString &str) const } +int RDStation::jackPorts() const +{ + return RDGetSqlValue("STATIONS","NAME",station_name,"JACK_PORTS").toInt(); +} + + +void RDStation::setJackPorts(int ports) const +{ + SetRow("JACK_PORTS",ports); +} + + int RDStation::cueCard() const { return RDGetSqlValue("STATIONS","NAME",station_name,"CUE_CARD").toInt(); @@ -867,14 +879,15 @@ bool RDStation::create(const QString &name,QString *err_msg, "START_JACK,"+ // 13 "JACK_SERVER_NAME,"+ // 14 "JACK_COMMAND_LINE,"+ // 15 - "CUE_CARD,"+ // 16 - "CUE_PORT,"+ // 17 - "CUE_START_CART,"+ // 18 - "CUE_STOP_CART,"+ // 19 - "CARTSLOT_COLUMNS,"+ // 20 - "CARTSLOT_ROWS,"+ // 21 - "ENABLE_DRAGDROP,"+ // 22 - "ENFORCE_PANEL_SETUP "+ // 23 + "JACK_PORTS,"+ // 16 + "CUE_CARD,"+ // 17 + "CUE_PORT,"+ // 18 + "CUE_START_CART,"+ // 19 + "CUE_STOP_CART,"+ // 20 + "CARTSLOT_COLUMNS,"+ // 21 + "CARTSLOT_ROWS,"+ // 22 + "ENABLE_DRAGDROP,"+ // 23 + "ENFORCE_PANEL_SETUP "+ // 24 "from STATIONS where "+ "NAME=\""+RDEscapeString(exemplar)+"\""; q=new RDSqlQuery(sql); @@ -901,14 +914,15 @@ bool RDStation::create(const QString &name,QString *err_msg, "START_JACK=\""+RDEscapeString(q->value(13).toString())+"\","+ "JACK_SERVER_NAME=\""+RDEscapeString(q->value(14).toString())+"\","+ "JACK_COMMAND_LINE=\""+RDEscapeString(q->value(15).toString())+"\","+ - QString().sprintf("CUE_CARD=%d,",q->value(16).toInt())+ - QString().sprintf("CUE_PORT=%d,",q->value(17).toInt())+ - QString().sprintf("CUE_START_CART=%u,",q->value(18).toInt())+ - QString().sprintf("CUE_STOP_CART=%u,",q->value(19).toInt())+ - QString().sprintf("CARTSLOT_COLUMNS=%d,",q->value(20).toInt())+ - QString().sprintf("CARTSLOT_ROWS=%d,",q->value(21).toInt())+ - "ENABLE_DRAGDROP=\""+RDEscapeString(q->value(22).toString())+"\","+ - "ENFORCE_PANEL_SETUP=\""+RDEscapeString(q->value(23).toString())+"\""; + QString().sprintf("JACK_PORTS=%d,",q->value(16).toInt())+ + QString().sprintf("CUE_CARD=%d,",q->value(17).toInt())+ + QString().sprintf("CUE_PORT=%d,",q->value(18).toInt())+ + QString().sprintf("CUE_START_CART=%u,",q->value(19).toInt())+ + QString().sprintf("CUE_STOP_CART=%u,",q->value(20).toInt())+ + QString().sprintf("CARTSLOT_COLUMNS=%d,",q->value(21).toInt())+ + QString().sprintf("CARTSLOT_ROWS=%d,",q->value(22).toInt())+ + "ENABLE_DRAGDROP=\""+RDEscapeString(q->value(23).toString())+"\","+ + "ENFORCE_PANEL_SETUP=\""+RDEscapeString(q->value(24).toString())+"\""; q1=new RDSqlQuery(sql); if(!q1->isActive()) { *err_msg=QObject::tr("host already exists"); diff --git a/lib/rdstation.h b/lib/rdstation.h index eb7a092a..9ccb1692 100644 --- a/lib/rdstation.h +++ b/lib/rdstation.h @@ -76,6 +76,8 @@ class RDStation void setJackServerName(const QString &str) const; QString jackCommandLine() const; void setJackCommandLine(const QString &str) const; + int jackPorts() const; + void setJackPorts(int ports) const; int cueCard() const; void setCueCard(int card); int cuePort() const; diff --git a/rdadmin/edit_jack.cpp b/rdadmin/edit_jack.cpp index 1eb7413a..1628e5df 100644 --- a/rdadmin/edit_jack.cpp +++ b/rdadmin/edit_jack.cpp @@ -95,6 +95,16 @@ EditJack::EditJack(RDStation *station,QWidget *parent) edit_jack_command_line_label-> setAlignment(AlignRight|AlignVCenter|ShowPrefix); + // + // Initial Audio Ports + // + edit_jack_audio_ports_spin=new QSpinBox(this); + edit_jack_audio_ports_spin->setRange(0,24); + edit_jack_audio_ports_label= + new QLabel(edit_jack_audio_ports_spin,tr("Initial Audio Ports")+":",this); + edit_jack_audio_ports_label->setFont(font); + edit_jack_audio_ports_label->setAlignment(AlignRight|AlignVCenter|ShowPrefix); + // // JACK Client List // @@ -159,6 +169,7 @@ EditJack::EditJack(RDStation *station,QWidget *parent) edit_start_jack_box->setChecked(edit_station->startJack()); edit_jack_server_name_edit->setText(edit_station->jackServerName()); edit_jack_command_line_edit->setText(edit_station->jackCommandLine()); + edit_jack_audio_ports_spin->setValue(edit_station->jackPorts()); if(edit_jack_server_name_edit->text().isEmpty()) { edit_jack_server_name_edit->setText(EDITJACK_DEFAULT_SERVERNAME); } @@ -170,7 +181,7 @@ EditJack::EditJack(RDStation *station,QWidget *parent) QSize EditJack::sizeHint() const { - return QSize(450,330); + return QSize(450,352); } @@ -279,6 +290,7 @@ void EditJack::okData() edit_station->setJackServerName(edit_jack_server_name_edit->text()); } edit_station->setJackCommandLine(edit_jack_command_line_edit->text()); + edit_station->setJackPorts(edit_jack_audio_ports_spin->value()); item=(RDListViewItem *)edit_jack_client_view->firstChild(); while(item!=NULL) { sql=QString("update JACK_CLIENTS set DESCRIPTION=\"")+ @@ -311,9 +323,12 @@ void EditJack::resizeEvent(QResizeEvent *e) edit_jack_command_line_label->setGeometry(10,54,130,20); edit_jack_command_line_edit->setGeometry(145,54,size().width()-155,20); - edit_jack_client_label->setGeometry(15,80,sizeHint().width()-28,20); + edit_jack_audio_ports_label->setGeometry(10,76,130,20); + edit_jack_audio_ports_spin->setGeometry(145,76,50,20); + + edit_jack_client_label->setGeometry(15,103,sizeHint().width()-28,20); edit_jack_client_view-> - setGeometry(10,102,size().width()-20,size().height()-170); + setGeometry(10,124,size().width()-20,size().height()-192); edit_add_button->setGeometry(15,size().height()-60,50,30); edit_edit_button->setGeometry(75,size().height()-60,50,30); diff --git a/rdadmin/edit_jack.h b/rdadmin/edit_jack.h index 8a3d7efb..cd215936 100644 --- a/rdadmin/edit_jack.h +++ b/rdadmin/edit_jack.h @@ -21,17 +21,18 @@ #ifndef EDIT_JACK_H #define EDIT_JACK_H -#include -#include -#include -#include #include -#include -#include +#include #include +#include +#include +#include +#include +#include +#include -#include #include +#include #define EDITJACK_DEFAULT_SERVERNAME QObject::tr("(default)") @@ -63,6 +64,8 @@ class EditJack : public QDialog QLineEdit *edit_jack_server_name_edit; QLabel *edit_jack_command_line_label; QLineEdit *edit_jack_command_line_edit; + QLabel *edit_jack_audio_ports_label; + QSpinBox *edit_jack_audio_ports_spin; QLabel *edit_jack_client_label; RDListView *edit_jack_client_view; RDStation *edit_station; diff --git a/rdadmin/rdadmin_cs.ts b/rdadmin/rdadmin_cs.ts index 92061545..738781af 100644 --- a/rdadmin/rdadmin_cs.ts +++ b/rdadmin/rdadmin_cs.ts @@ -1922,6 +1922,10 @@ Stále ještě chcete uložit? Are you sure you want to delete JACK Client + + Initial Audio Ports + + EditJackClient diff --git a/rdadmin/rdadmin_de.ts b/rdadmin/rdadmin_de.ts index 88aac6de..b6e42cf9 100644 --- a/rdadmin/rdadmin_de.ts +++ b/rdadmin/rdadmin_de.ts @@ -1897,6 +1897,10 @@ Do you still want to save? Are you sure you want to delete JACK Client + + Initial Audio Ports + + EditJackClient diff --git a/rdadmin/rdadmin_es.ts b/rdadmin/rdadmin_es.ts index 435830f7..e96e3a15 100644 --- a/rdadmin/rdadmin_es.ts +++ b/rdadmin/rdadmin_es.ts @@ -1928,6 +1928,10 @@ Do you still want to save? Are you sure you want to delete JACK Client + + Initial Audio Ports + + EditJackClient diff --git a/rdadmin/rdadmin_fr.ts b/rdadmin/rdadmin_fr.ts index ece3415c..65e7d93e 100644 --- a/rdadmin/rdadmin_fr.ts +++ b/rdadmin/rdadmin_fr.ts @@ -1650,6 +1650,10 @@ Do you still want to save? Are you sure you want to delete JACK Client + + Initial Audio Ports + + EditJackClient diff --git a/rdadmin/rdadmin_nb.ts b/rdadmin/rdadmin_nb.ts index 58b48bb9..5c8aa8d6 100644 --- a/rdadmin/rdadmin_nb.ts +++ b/rdadmin/rdadmin_nb.ts @@ -1884,6 +1884,10 @@ Vil du framleis lagra? Are you sure you want to delete JACK Client + + Initial Audio Ports + + EditJackClient diff --git a/rdadmin/rdadmin_nn.ts b/rdadmin/rdadmin_nn.ts index 58b48bb9..5c8aa8d6 100644 --- a/rdadmin/rdadmin_nn.ts +++ b/rdadmin/rdadmin_nn.ts @@ -1884,6 +1884,10 @@ Vil du framleis lagra? Are you sure you want to delete JACK Client + + Initial Audio Ports + + EditJackClient diff --git a/rdadmin/rdadmin_pt_BR.ts b/rdadmin/rdadmin_pt_BR.ts index 69f40491..3ac22350 100644 --- a/rdadmin/rdadmin_pt_BR.ts +++ b/rdadmin/rdadmin_pt_BR.ts @@ -1882,6 +1882,10 @@ Você ainda quer salvar? Are you sure you want to delete JACK Client + + Initial Audio Ports + + EditJackClient diff --git a/utils/rddbmgr/rddbmgr.cpp b/utils/rddbmgr/rddbmgr.cpp index 2d858400..75b9f989 100644 --- a/utils/rddbmgr/rddbmgr.cpp +++ b/utils/rddbmgr/rddbmgr.cpp @@ -317,11 +317,11 @@ MainObject::MainObject(QObject *parent) } else { if(set_version.isEmpty()) { + set_schema=RD_VERSION_DATABASE; if(set_schemacur_schema)) { + sql=QString("alter table STATIONS add column ")+ + "JACK_PORTS int not null default 8 after JACK_COMMAND_LINE"; + if(!RDSqlQuery::apply(sql,err_msg)) { + return false; + } + + cur_schema++; + } + + // // Maintainer's Note: From ada66bd9147dcc684cae72f1269abc8885b787e5 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Tue, 12 Jun 2018 14:30:03 +0000 Subject: [PATCH 2/4] Fixed typo in ChangeLog --- ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 42a53ba6..f059e1a0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -17041,7 +17041,7 @@ 2018-06-08 Fred Gleason * Fixed typos in the rddbmgr(8) man page. 2018-06-11 Fred Gleason - * Added a 'STATIONS.JACK_PORT' field to the database. + * Added a 'STATIONS.JACK_PORTS' field to the database. * Incremented the database version to 287. * Added an 'Initial Audio Ports' control to the 'JACK Configuration' dialog in rdadmin(1). From ea11505dbe494643b7e136fe2f79bec0444dfb89 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Tue, 12 Jun 2018 15:15:59 +0000 Subject: [PATCH 3/4] 2018-06-12 Fred Gleason * Changed the name of the 'Initial Audio Ports' control to 'Active Audio Ports' in the 'Configure JACK' dialog in rdadmin(1). --- ChangeLog | 5 ++-- docs/apis/cae.xml | 50 --------------------------------- docs/opsguide/rml.xml | 60 ---------------------------------------- lib/rdmacro.cpp | 2 -- lib/rdmacro.h | 18 ++++++------ rdadmin/edit_jack.cpp | 4 +-- rdadmin/rdadmin_cs.ts | 2 +- rdadmin/rdadmin_de.ts | 2 +- rdadmin/rdadmin_es.ts | 2 +- rdadmin/rdadmin_fr.ts | 2 +- rdadmin/rdadmin_nb.ts | 2 +- rdadmin/rdadmin_nn.ts | 2 +- rdadmin/rdadmin_pt_BR.ts | 2 +- 13 files changed, 21 insertions(+), 132 deletions(-) diff --git a/ChangeLog b/ChangeLog index f059e1a0..6d0597dd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -17045,5 +17045,6 @@ * Incremented the database version to 287. * Added an 'Initial Audio Ports' control to the 'JACK Configuration' dialog in rdadmin(1). - * Implemented 'Activate JACK Port' ['JA'] and 'Remove JACK Port' ['JR'] - RMLs. +2018-06-12 Fred Gleason + * Changed the name of the 'Initial Audio Ports' control to + 'Active Audio Ports' in the 'Configure JACK' dialog in rdadmin(1). diff --git a/docs/apis/cae.xml b/docs/apis/cae.xml index b944335e..f26ee313 100644 --- a/docs/apis/cae.xml +++ b/docs/apis/cae.xml @@ -1385,31 +1385,6 @@ JACK Operations - - <command>Activate Port</command> - - Add a complementary pair of JACK ports (input and output) to the - JACK graph, at the port position indicated by - port. If the ports are already active, do - nothing. - - - JA num! - - - - - num - - - - The port position to which to associate the added port. - - - - - - <command>Connect Ports</command> @@ -1477,31 +1452,6 @@ - - - <command>Remove Port</command> - - Remove a complementary pair of JACK ports (input and output) from the - JACK graph, at the port position indicated by - port. If the ports are not active, do - nothing. - - - JR num! - - - - - num - - - - The port position to which to associate the added port. - - - - - diff --git a/docs/opsguide/rml.xml b/docs/opsguide/rml.xml index 4fc6cc16..d82c8ed1 100644 --- a/docs/opsguide/rml.xml +++ b/docs/opsguide/rml.xml @@ -171,36 +171,6 @@ Commands - - Activate Jack Port [JA] - - - - Module - caed8 - - - Mnemonic - JA - - - - - Activate an audio port to the JACK processing graph. - - - JA - num! - - - Activate port num in the JACK graph, causing - new playout and captures ports corresponding to - num to be added to the JACK graph. - num must be an integer between - 1 and 24 inclusive. - - - Air Gate [AG] @@ -1389,36 +1359,6 @@ - - Remove Jack Port [JR] - - - - Module - caed8 - - - Mnemonic - JR - - - - - Remove an audio port from the JACK processing graph. - num must be an integer between - 1 and 24 inclusive. - - - JR - num! - - - Deactivate port num in the JACK graph, causing - new playout and captures ports corresponding to - num to be removed from the JACK graph. - - - Run Shell Command [RN] diff --git a/lib/rdmacro.cpp b/lib/rdmacro.cpp index ce4a0843..5e991711 100644 --- a/lib/rdmacro.cpp +++ b/lib/rdmacro.cpp @@ -178,10 +178,8 @@ bool RDMacro::parseString(const char *str,int n) case RDMacro::GE: case RDMacro::GI: case RDMacro::GO: - case RDMacro::JA: case RDMacro::JC: case RDMacro::JD: - case RDMacro::JR: case RDMacro::LB: case RDMacro::LC: case RDMacro::LL: diff --git a/lib/rdmacro.h b/lib/rdmacro.h index 5d25b39f..d5d8a5c9 100644 --- a/lib/rdmacro.h +++ b/lib/rdmacro.h @@ -37,15 +37,15 @@ class RDMacro public: enum Command {AG=0x4147,AL=0x414C,BO=0x424F,CC=0x4343,CE=0x4345,CL=0x434C, CP=0x4350,DB=0x4442,DL=0x444C,DP=0x4450,DS=0x4453,DX=0x4458, - EX=0x4558,FS=0x4653,GE=0x4745,GI=0x4749,GO=0x474F,JA=0x4A41, - JC=0x4A43,JD=0x4A44,JR=0x4A52,LB=0x4C42,LC=0x4C43,LL=0x4C4C, - LO=0x4C4F,MB=0x4D42,MD=0x4D44,MN=0x4D4E,MT=0x4D54,NN=0x4E4E, - PB=0x5042,PC=0x5043,PD=0x5044,PE=0x5045,PL=0x504C,PM=0x504D, - PN=0x504E,PP=0x5050,PS=0x5053,PT=0x5054,PU=0x5055,PW=0x5057, - PX=0x5058,RL=0x524C,RN=0x524E,RS=0x5253,RR=0x5252,SA=0x5341, - SC=0x5343,SD=0x5344,SG=0x5347,SI=0x5349,SL=0x534C,SN=0x534e, - SO=0x534F,SP=0x5350,SR=0x5352,ST=0x5354,SX=0x5358,SY=0x5359, - SZ=0x535A,TA=0x5441,UO=0x554F}; + EX=0x4558,FS=0x4653,GE=0x4745,GI=0x4749,GO=0x474F,JC=0x4A43, + JD=0x4A44,LB=0x4C42,LC=0x4C43,LL=0x4C4C,LO=0x4C4F,MB=0x4D42, + MD=0x4D44,MN=0x4D4E,MT=0x4D54,NN=0x4E4E,PB=0x5042,PC=0x5043, + PD=0x5044,PE=0x5045,PL=0x504C,PM=0x504D,PN=0x504E,PP=0x5050, + PS=0x5053,PT=0x5054,PU=0x5055,PW=0x5057,PX=0x5058,RL=0x524C, + RN=0x524E,RS=0x5253,RR=0x5252,SA=0x5341,SC=0x5343,SD=0x5344, + SG=0x5347,SI=0x5349,SL=0x534C,SN=0x534e,SO=0x534F,SP=0x5350, + SR=0x5352,ST=0x5354,SX=0x5358,SY=0x5359,SZ=0x535A,TA=0x5441, + UO=0x554F}; enum Role {Invalid=0,Cmd=1,Reply=2}; RDMacro(); RDMacro::Role role() const; diff --git a/rdadmin/edit_jack.cpp b/rdadmin/edit_jack.cpp index 1628e5df..376096a4 100644 --- a/rdadmin/edit_jack.cpp +++ b/rdadmin/edit_jack.cpp @@ -96,12 +96,12 @@ EditJack::EditJack(RDStation *station,QWidget *parent) setAlignment(AlignRight|AlignVCenter|ShowPrefix); // - // Initial Audio Ports + // Active Audio Ports // edit_jack_audio_ports_spin=new QSpinBox(this); edit_jack_audio_ports_spin->setRange(0,24); edit_jack_audio_ports_label= - new QLabel(edit_jack_audio_ports_spin,tr("Initial Audio Ports")+":",this); + new QLabel(edit_jack_audio_ports_spin,tr("Active Audio Ports")+":",this); edit_jack_audio_ports_label->setFont(font); edit_jack_audio_ports_label->setAlignment(AlignRight|AlignVCenter|ShowPrefix); diff --git a/rdadmin/rdadmin_cs.ts b/rdadmin/rdadmin_cs.ts index 738781af..69365afe 100644 --- a/rdadmin/rdadmin_cs.ts +++ b/rdadmin/rdadmin_cs.ts @@ -1923,7 +1923,7 @@ Stále ještě chcete uložit? - Initial Audio Ports + Active Audio Ports diff --git a/rdadmin/rdadmin_de.ts b/rdadmin/rdadmin_de.ts index b6e42cf9..a531abc3 100644 --- a/rdadmin/rdadmin_de.ts +++ b/rdadmin/rdadmin_de.ts @@ -1898,7 +1898,7 @@ Do you still want to save? - Initial Audio Ports + Active Audio Ports diff --git a/rdadmin/rdadmin_es.ts b/rdadmin/rdadmin_es.ts index e96e3a15..982fae1b 100644 --- a/rdadmin/rdadmin_es.ts +++ b/rdadmin/rdadmin_es.ts @@ -1929,7 +1929,7 @@ Do you still want to save? - Initial Audio Ports + Active Audio Ports diff --git a/rdadmin/rdadmin_fr.ts b/rdadmin/rdadmin_fr.ts index 65e7d93e..e5a1ea9a 100644 --- a/rdadmin/rdadmin_fr.ts +++ b/rdadmin/rdadmin_fr.ts @@ -1651,7 +1651,7 @@ Do you still want to save? - Initial Audio Ports + Active Audio Ports diff --git a/rdadmin/rdadmin_nb.ts b/rdadmin/rdadmin_nb.ts index 5c8aa8d6..bb8411a3 100644 --- a/rdadmin/rdadmin_nb.ts +++ b/rdadmin/rdadmin_nb.ts @@ -1885,7 +1885,7 @@ Vil du framleis lagra? - Initial Audio Ports + Active Audio Ports diff --git a/rdadmin/rdadmin_nn.ts b/rdadmin/rdadmin_nn.ts index 5c8aa8d6..bb8411a3 100644 --- a/rdadmin/rdadmin_nn.ts +++ b/rdadmin/rdadmin_nn.ts @@ -1885,7 +1885,7 @@ Vil du framleis lagra? - Initial Audio Ports + Active Audio Ports diff --git a/rdadmin/rdadmin_pt_BR.ts b/rdadmin/rdadmin_pt_BR.ts index 3ac22350..31033cf8 100644 --- a/rdadmin/rdadmin_pt_BR.ts +++ b/rdadmin/rdadmin_pt_BR.ts @@ -1883,7 +1883,7 @@ Você ainda quer salvar? - Initial Audio Ports + Active Audio Ports From bb60b722d120fd589b118dba06dcdf46b4c92676 Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Tue, 12 Jun 2018 19:00:55 +0000 Subject: [PATCH 4/4] 2018-06-12 Fred Gleason * Added a 'card-num' parameter to the 'Meter Enable' ['ME'] command in caed(8). * Added an 'RDCae::enableMetering()' method. * Modified rdairplay(1) to enable metering explicitly. * Modified rdcartslots(1) to enable metering explicitly. * Modified rdlibrary(1) to enable metering explicitly. * Modified rdpanel(1) to enable metering explicitly. --- ChangeLog | 8 ++++ cae/cae.cpp | 74 +++++++++++++++++++++++-------------- cae/cae.h | 3 +- docs/apis/cae.xml | 17 ++++++++- lib/rdcae.cpp | 22 ++++++++++- lib/rdcae.h | 3 +- rdairplay/rdairplay.cpp | 23 +++++++++++- rdairplay/rdairplay.h | 3 +- rdcartslots/rdcartslots.cpp | 19 ++++++++++ rdcartslots/rdcartslots.h | 7 +--- rdlibrary/rdlibrary.cpp | 13 +++++++ rdlibrary/rdlibrary.h | 1 + rdpanel/rdpanel.cpp | 15 ++++++++ rdpanel/rdpanel.h | 1 + 14 files changed, 168 insertions(+), 41 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6d0597dd..b7386074 100644 --- a/ChangeLog +++ b/ChangeLog @@ -17048,3 +17048,11 @@ 2018-06-12 Fred Gleason * Changed the name of the 'Initial Audio Ports' control to 'Active Audio Ports' in the 'Configure JACK' dialog in rdadmin(1). +2018-06-12 Fred Gleason + * Added a 'card-num' parameter to the 'Meter Enable' ['ME'] command + in caed(8). + * Added an 'RDCae::enableMetering()' method. + * Modified rdairplay(1) to enable metering explicitly. + * Modified rdcartslots(1) to enable metering explicitly. + * Modified rdlibrary(1) to enable metering explicitly. + * Modified rdpanel(1) to enable metering explicitly. diff --git a/cae/cae.cpp b/cae/cae.cpp index 10847c78..4c3d7716 100644 --- a/cae/cae.cpp +++ b/cae/cae.cpp @@ -171,6 +171,9 @@ MainObject::MainObject(QObject *parent,const char *name) argnum[i]=0; argptr[i]=0; auth[i]=false; + for(int j=0;j=RD_MAX_CARDS)) { + EchoArgs(ch,'-'); + return; + } + update_meters[card][ch]=true; + } + EchoArgs(ch,'+'); SendMeterOutputStatusUpdate(); return; @@ -1885,6 +1897,7 @@ void MainObject::KillSocket(int ch) auth[ch]=false; meter_port[ch]=0; for(int i=0;i0)&&update_meters[cardnum][l]) { + SendMeterUpdate(QString().sprintf("ML %s %d %d %d %d", + (const char *)type,cardnum,portnum,levels[0],levels[1]),l); + } + } } void MainObject::SendStreamMeterLevelUpdate(int cardnum,int streamnum, short levels[]) { - char msg[1500]; - int n=snprintf(msg,1500,"MO %d %d %d %d", - cardnum,streamnum,levels[0],levels[1]); - SendMeterUpdate(msg,n); + for(int l=0;l0)&&update_meters[cardnum][l]) { + SendMeterUpdate(QString().sprintf("MO %d %d %d %d", + cardnum,streamnum,levels[0],levels[1]),l); + } + } } void MainObject::SendMeterPositionUpdate(int cardnum,unsigned pos[]) { - char msg[1500]; - int n; - for(unsigned i=0;i0)&&update_meters[cardnum][l]) { + SendMeterUpdate(QString().sprintf("MP %d %d %d",cardnum,k,pos[k]),l); + } + } } } @@ -2341,7 +2359,12 @@ void MainObject::SendMeterOutputStatusUpdate() if(cae_driver[i]!=RDStation::None) { for(unsigned j=0;j0)&&update_meters[i][l]) { + SendMeterUpdate(QString().sprintf("MS %d %d %d %d",i,j,k, + output_status_flag[i][j][k]),l); + } + } } } } @@ -2351,23 +2374,20 @@ void MainObject::SendMeterOutputStatusUpdate() void MainObject::SendMeterOutputStatusUpdate(int card,int port,int stream) { - char msg[1500]; - int n; - n=snprintf(msg,1500,"MS %d %d %d %d",card,port,stream, - output_status_flag[card][port][stream]); - SendMeterUpdate(msg,n); -} - - -void MainObject::SendMeterUpdate(const char *msg,unsigned len) -{ - for(unsigned i=0;i0) { - meter_socket->writeBlock(msg,len,socket[i]->peerAddress(),meter_port[i]); + for(unsigned l=0;l0)&&update_meters[card][l]) { + SendMeterUpdate(QString().sprintf("MS %d %d %d %d",card,port,stream, + output_status_flag[card][port][stream]),l); } } } +void MainObject::SendMeterUpdate(const QString &msg,int conn_id) +{ + meter_socket->writeBlock(msg,msg.length(),socket[conn_id]->peerAddress(), + meter_port[conn_id]); +} + int main(int argc,char *argv[]) { diff --git a/cae/cae.h b/cae/cae.h index 77d11e6f..0a5fecd7 100644 --- a/cae/cae.h +++ b/cae/cae.h @@ -142,7 +142,7 @@ class MainObject : public QObject void SendMeterPositionUpdate(int cardnum,unsigned pos[]); void SendMeterOutputStatusUpdate(); void SendMeterOutputStatusUpdate(int card,int port,int stream); - void SendMeterUpdate(const char *msg,unsigned len); + void SendMeterUpdate(const QString &msg,int conn_id); bool debug; unsigned system_sample_rate; Q_INT16 tcp_port; @@ -165,6 +165,7 @@ class MainObject : public QObject bool play_pitch[RD_MAX_CARDS][RD_MAX_STREAMS]; bool port_status[RD_MAX_CARDS][RD_MAX_PORTS]; bool output_status_flag[RD_MAX_CARDS][RD_MAX_PORTS][RD_MAX_STREAMS]; + bool update_meters[RD_MAX_CARDS][CAE_MAX_CONNECTIONS]; struct { int card; int stream; diff --git a/docs/apis/cae.xml b/docs/apis/cae.xml index f26ee313..72ec24c3 100644 --- a/docs/apis/cae.xml +++ b/docs/apis/cae.xml @@ -1459,11 +1459,14 @@ <command>Meter Enable</command> - Set UDP port to whcih to send meter update messages. + Set UDP port to which to send meter update messages for the specified + card(s). ME - udp-port! + udp-port + card0 + ..! @@ -1476,6 +1479,16 @@ + + + card0 + + + + Audio card number for which to send updates. + + + diff --git a/lib/rdcae.cpp b/lib/rdcae.cpp index 0e17be95..3bc9e46e 100644 --- a/lib/rdcae.cpp +++ b/lib/rdcae.cpp @@ -118,10 +118,30 @@ void RDCae::connectHost() SendCommand(QString().sprintf("IS %d %d!",i,j)); } } - SendCommand(QString().sprintf("ME %u!",cae_meter_socket->port())); } } + +void RDCae::enableMetering(std::vector *cards) +{ + QString cmd=QString().sprintf("ME %u",cae_meter_socket->port()); + for(unsigned i=0;isize();i++) { + if(cards->at(i)>=0) { + bool found=false; + for(unsigned j=0;jat(i)==cards->at(j)) { + found=true; + } + } + if(!found) { + cmd+=QString().sprintf(" %d",cards->at(i)); + } + } + } + SendCommand(cmd+"!"); +} + + bool RDCae::loadPlay(int card,QString name,int *stream,int *handle) { int count=0; diff --git a/lib/rdcae.h b/lib/rdcae.h index 60ac5856..47a7990b 100644 --- a/lib/rdcae.h +++ b/lib/rdcae.h @@ -45,6 +45,7 @@ class RDCae : public QObject RDCae(RDStation *station,RDConfig *config,QObject *parent=0); ~RDCae(); void connectHost(); + void enableMetering(std::vector *cards); bool loadPlay(int card,QString name,int *stream,int *handle); void unloadPlay(int handle); void positionPlay(int handle,int pos); @@ -127,4 +128,4 @@ class RDCae : public QObject }; -#endif +#endif // RDCAE_H diff --git a/rdairplay/rdairplay.cpp b/rdairplay/rdairplay.cpp index 224a292f..5b9177ee 100644 --- a/rdairplay/rdairplay.cpp +++ b/rdairplay/rdairplay.cpp @@ -304,6 +304,8 @@ MainWidget::MainWidget(QWidget *parent) // // CAE Connection // + connect(rda->cae(),SIGNAL(isConnected(bool)), + this,SLOT(caeConnectedData(bool))); rda->cae()->connectHost(); // @@ -315,7 +317,7 @@ MainWidget::MainWidget(QWidget *parent) // // RIPC Connection // - connect(rda->ripc(),SIGNAL(connected(bool)),this,SLOT(ripcConnected(bool))); + connect(rda->ripc(),SIGNAL(connected(bool)),this,SLOT(ripcConnectedData(bool))); connect(rda,SIGNAL(userChanged()),this,SLOT(userData())); connect(rda->ripc(),SIGNAL(rmlReceived(RDMacro *)), this,SLOT(rmlReceivedData(RDMacro *))); @@ -914,7 +916,24 @@ QSizePolicy MainWidget::sizePolicy() const } -void MainWidget::ripcConnected(bool state) +void MainWidget::caeConnectedData(bool state) +{ + std::vector cards; + + cards.push_back(rda->airplayConf()->card(RDAirPlayConf::MainLog1Channel)); + cards.push_back(rda->airplayConf()->card(RDAirPlayConf::MainLog2Channel)); + cards.push_back(rda->airplayConf()->card(RDAirPlayConf::AuxLog1Channel)); + cards.push_back(rda->airplayConf()->card(RDAirPlayConf::AuxLog2Channel)); + cards.push_back(rda->airplayConf()->card(RDAirPlayConf::SoundPanel1Channel)); + cards.push_back(rda->airplayConf()->card(RDAirPlayConf::SoundPanel2Channel)); + cards.push_back(rda->airplayConf()->card(RDAirPlayConf::SoundPanel3Channel)); + cards.push_back(rda->airplayConf()->card(RDAirPlayConf::SoundPanel4Channel)); + cards.push_back(rda->airplayConf()->card(RDAirPlayConf::SoundPanel5Channel)); + rda->cae()->enableMetering(&cards); +} + + +void MainWidget::ripcConnectedData(bool state) { QString logname; QHostAddress addr; diff --git a/rdairplay/rdairplay.h b/rdairplay/rdairplay.h index d5b7610b..6715b2db 100644 --- a/rdairplay/rdairplay.h +++ b/rdairplay/rdairplay.h @@ -98,7 +98,8 @@ class MainWidget : public QWidget private slots: void logLine(RDConfig::LogPriority prio,const QString &msg); - void ripcConnected(bool state); + void caeConnectedData(bool state); + void ripcConnectedData(bool state); void rmlReceivedData(RDMacro *rml); void gpiStateChangedData(int matrix,int line,bool state); void logChannelStartedData(int id,int mport,int card,int port); diff --git a/rdcartslots/rdcartslots.cpp b/rdcartslots/rdcartslots.cpp index 31d10799..90092903 100644 --- a/rdcartslots/rdcartslots.cpp +++ b/rdcartslots/rdcartslots.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include "rdcartslots.h" @@ -92,6 +93,8 @@ MainWidget::MainWidget(QWidget *parent) // // CAE Connection // + connect(rda->cae(),SIGNAL(isConnected(bool)), + this,SLOT(caeConnectedData(bool))); rda->cae()->connectHost(); // @@ -166,6 +169,22 @@ QSize MainWidget::sizeHint() const } +void MainWidget::caeConnectedData(bool state) +{ + std::vector cards; + + QString sql=QString("select CARD from CARTSLOTS where ")+ + "STATION_NAME=\""+RDEscapeString(rda->config()->stationName())+"\""; + RDSqlQuery *q=new RDSqlQuery(sql); + while(q->next()) { + cards.push_back(q->value(0).toInt()); + } + delete q; + + rda->cae()->enableMetering(&cards); +} + + void MainWidget::rmlReceivedData(RDMacro *rml) { RunLocalMacros(rml); diff --git a/rdcartslots/rdcartslots.h b/rdcartslots/rdcartslots.h index 12481165..6f7f9b09 100644 --- a/rdcartslots/rdcartslots.h +++ b/rdcartslots/rdcartslots.h @@ -56,6 +56,7 @@ class MainWidget : public QWidget QSizePolicy sizePolicy() const; private slots: + void caeConnectedData(bool state); void userData(); void rmlReceivedData(RDMacro *rml); @@ -66,12 +67,6 @@ class MainWidget : public QWidget private: void RunLocalMacros(RDMacro *rml); void SetCaption(); - // RDConfig *panel_config; - // RDCae *panel_cae; - // RDRipc *panel_ripc; - // RDUser *panel_user; - // RDStation *panel_station; - // RDSystem *panel_system; RDEventPlayer *panel_player; QPixmap *lib_rivendell_map; QString panel_filter; diff --git a/rdlibrary/rdlibrary.cpp b/rdlibrary/rdlibrary.cpp index 7a59c6f1..73bee352 100644 --- a/rdlibrary/rdlibrary.cpp +++ b/rdlibrary/rdlibrary.cpp @@ -190,6 +190,8 @@ MainWidget::MainWidget(QWidget *parent) // // CAE Connection // + connect(rda->cae(),SIGNAL(isConnected(bool)), + this,SLOT(caeConnectedData(bool))); rda->cae()->connectHost(); // @@ -483,6 +485,17 @@ QSizePolicy MainWidget::sizePolicy() const } +void MainWidget::caeConnectedData(bool state) +{ + if(state) { + std::vector cards; + cards.push_back(rda->libraryConf()->inputCard()); + cards.push_back(rda->libraryConf()->outputCard()); + rda->cae()->enableMetering(&cards); + } +} + + void MainWidget::userData() { QString sql; diff --git a/rdlibrary/rdlibrary.h b/rdlibrary/rdlibrary.h index 51820397..a9ef7120 100644 --- a/rdlibrary/rdlibrary.h +++ b/rdlibrary/rdlibrary.h @@ -70,6 +70,7 @@ class MainWidget : public QWidget QSizePolicy sizePolicy() const; private slots: + void caeConnectedData(bool state); void userData(); void filterChangedData(const QString &str); void searchClickedData(); diff --git a/rdpanel/rdpanel.cpp b/rdpanel/rdpanel.cpp index 74c21c9d..bcd31b0d 100644 --- a/rdpanel/rdpanel.cpp +++ b/rdpanel/rdpanel.cpp @@ -145,6 +145,8 @@ MainWidget::MainWidget(QWidget *parent) // // CAE Connection // + connect(rda->cae(),SIGNAL(isConnected(bool)), + this,SLOT(caeConnectedData(bool))); rda->cae()->connectHost(); // @@ -342,6 +344,19 @@ QSizePolicy MainWidget::sizePolicy() const } +void MainWidget::caeConnectedData(bool state) +{ + std::vector cards; + + cards.push_back(rda->airplayConf()->card(RDAirPlayConf::SoundPanel1Channel)); + cards.push_back(rda->airplayConf()->card(RDAirPlayConf::SoundPanel2Channel)); + cards.push_back(rda->airplayConf()->card(RDAirPlayConf::SoundPanel3Channel)); + cards.push_back(rda->airplayConf()->card(RDAirPlayConf::SoundPanel4Channel)); + cards.push_back(rda->airplayConf()->card(RDAirPlayConf::SoundPanel5Channel)); + rda->cae()->enableMetering(&cards); +} + + void MainWidget::userData() { SetCaption(); diff --git a/rdpanel/rdpanel.h b/rdpanel/rdpanel.h index 2d56124f..ed75569b 100644 --- a/rdpanel/rdpanel.h +++ b/rdpanel/rdpanel.h @@ -49,6 +49,7 @@ class MainWidget : public QWidget QSizePolicy sizePolicy() const; private slots: + void caeConnectedData(bool state); void userData(); void masterTimerData(); void meterData();