diff --git a/ChangeLog b/ChangeLog index 7d94c615..d07b8c1e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16875,3 +16875,19 @@ 2018-05-18 Fred Gleason * Changed RD_MAX_CARDS from '8' to '24'. * Changed RD_MAX_PORTS from '8' to '24'. +2018-05-21 Fred Gleason + * Added an 'AUDIO_CARDS' table to the database. + * Dropped the 'STATIONS.CARD_DRIVER', 'STATIONS.CARDNAME', + 'STATIONS.CARD_INPUTS' and 'STATIONS.CARDOUTPUTS' fields + from the database. + * Incremented the database version to 282. + * Added an 'AUDIO_CARDS.CLOCK_SOURCE' field to the database. + * Added an 'AUDIO_INPUTS' table to the database. + * Added an 'AUDIO_OUTPUTS' table to the database. + * Dropped the 'AUDIO_PORTS' table from the database. + * Incremented the database version to 283. + * Changed the legend on the 'Audio Ports' button to 'ASI Audio Ports' + on the 'Edit Host' dialog in rdadmin(1). + * Changed the title of the 'Configure Audio Ports' dialog to + 'Configure AudioScience Audio Ports' on the 'Edit Host' dialog + in rdadmin(1). diff --git a/docs/tables/Makefile.am b/docs/tables/Makefile.am index 79c3d614..1d89fd71 100644 --- a/docs/tables/Makefile.am +++ b/docs/tables/Makefile.am @@ -2,7 +2,7 @@ ## ## docs/tables/automake.am for Rivendell ## -## (C) Copyright 2002-2016 Fred Gleason +## (C) Copyright 2002-2018 Fred Gleason ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License version 2 as @@ -20,8 +20,10 @@ ## ## Use automake to process this into a Makefile.in -EXTRA_DIST = audio_perms.txt\ - audio_ports.txt\ +EXTRA_DIST = audio_cards.txt\ + audio_inputs.txt\ + audio_outputs.txt\ + audio_perms.txt\ cart.txt\ cartslots.txt\ clipboard.txt\ diff --git a/docs/tables/audio_cards.txt b/docs/tables/audio_cards.txt new file mode 100644 index 00000000..7791c17f --- /dev/null +++ b/docs/tables/audio_cards.txt @@ -0,0 +1,16 @@ + AUDIO_CARD Table Layout for Rivendell + +The AUDIO_PORTS table holds data concerning configuration of the +physical audio interfaces. + +FIELD NAME TYPE REMARKS +--------------------------------------------------------------- +ID int(10) unsigned Primary key, auto increment +STATION_NAME char(64) +CARD_NUMBER int(11) signed +DRIVER int(11) signed +NAME char(64) +INPUTS int(11) signed +OUTPUTS int(11) signed +CLOCK_SOURCE int(11) signed 0 = Internal, 1 = AES/EBU, + 2 = SP/DIFF, 3 = Word Clock diff --git a/docs/tables/audio_inputs.txt b/docs/tables/audio_inputs.txt new file mode 100644 index 00000000..953c939c --- /dev/null +++ b/docs/tables/audio_inputs.txt @@ -0,0 +1,16 @@ + AUDIO_INPUTS Table Layout for Rivendell + +The AUDIO_PORTS table holds data concerning which configuration of the +physical audio inputs. + +FIELD NAME TYPE REMARKS +--------------------------------------------------------------- +ID int(10) unsigned Primary key, auto increment +STATION_NAME char(64) +CARD_NUMBER int(11) signed +PORT_NUMBER int(11) signed +TYPE int(11) signed 0 = Analog, 1 = AES/EBU, + 2 = SP/DIFF +LEVEL int(11) signed Gain offset, in 1/100 dB +MODE int(11) signed 0 = Normal, 1 = Swap, + 2 = Left Only, 3 = Right Only diff --git a/docs/tables/audio_outputs.txt b/docs/tables/audio_outputs.txt new file mode 100644 index 00000000..dcffca1a --- /dev/null +++ b/docs/tables/audio_outputs.txt @@ -0,0 +1,12 @@ + AUDIO_OUTPUTS Table Layout for Rivendell + +The AUDIO_PORTS table holds data concerning which configuration of the +physical audio outputs. + +FIELD NAME TYPE REMARKS +--------------------------------------------------------------- +ID int(10) unsigned Primary key, auto increment +STATION_NAME char(64) +CARD_NUMBER int(11) signed +PORT_NUMBER int(11) signed +LEVEL int(11) signed Gain offset, in 1/100 dB diff --git a/docs/tables/audio_ports.txt b/docs/tables/audio_ports.txt deleted file mode 100644 index d8a1c0b7..00000000 --- a/docs/tables/audio_ports.txt +++ /dev/null @@ -1,62 +0,0 @@ - AUDIO_PORTS Table Layout for Rivendell - -The AUDIO_PORTS table holds data concerning which configuration of the -physical audio interfaces. Following is the layout of a record -in the AUDIO_PERMS table: - - -FIELD NAME TYPE REMARKS ---------------------------------------------------------------- -ID int(10) unsigned Primary key, auto increment -STATION_NAME char(64) -CARD_NUMBER int(11) signed -CLOCK_SOURCE int(11) signed 0 = Internal, 1 = AES/EBU, - 2 = SP/DIFF, 3 = Word Clock -INPUT_0_TYPE int(11) signed 0 = Analog, 1 = AES/EBU, - 2 = SP/DIFF -INPUT_0_LEVEL int(11) signed Gain offset, in 1/100 dB -INPUT_0_MODE int(11) signed 0 = Normal, 1 = Swap, - 2 = Left Only, 3 = Right Only -INPUT_1_TYPE int(11) signed 0 = Analog, 1 = AES/EBU, - 2 = SP/DIFF -INPUT_1_LEVEL int(11) signed Gain offset, in 1/100 dB -INPUT_1_MODE int(11) signed 0 = Normal, 1 = Swap, - 2 = Left Only, 3 = Right Only -INPUT_2_TYPE int(11) signed 0 = Analog, 1 = AES/EBU, - 2 = SP/DIFF -INPUT_2_LEVEL int(11) signed Gain offset, in 1/100 dB -INPUT_2_MODE int(11) signed 0 = Normal, 1 = Swap, - 2 = Left Only, 3 = Right Only -INPUT_3_TYPE int(11) signed 0 = Analog, 1 = AES/EBU, - 2 = SP/DIFF -INPUT_3_LEVEL int(11) signed Gain offset, in 1/100 dB -INPUT_3_MODE int(11) signed 0 = Normal, 1 = Swap, - 2 = Left Only, 3 = Right Only -INPUT_4_TYPE int(11) signed 0 = Analog, 1 = AES/EBU, - 2 = SP/DIFF -INPUT_4_LEVEL int(11) signed Gain offset, in 1/100 dB -INPUT_4_MODE int(11) signed 0 = Normal, 1 = Swap, - 2 = Left Only, 3 = Right Only -INPUT_5_TYPE int(11) signed 0 = Analog, 1 = AES/EBU, - 2 = SP/DIFF -INPUT_5_LEVEL int(11) signed Gain offset, in 1/100 dB -INPUT_5_MODE int(11) signed 0 = Normal, 1 = Swap, - 2 = Left Only, 3 = Right Only -INPUT_6_TYPE int(11) signed 0 = Analog, 1 = AES/EBU, - 2 = SP/DIFF -INPUT_6_LEVEL int(11) signed Gain offset, in 1/100 dB -INPUT_6_MODE int(11) signed 0 = Normal, 1 = Swap, - 2 = Left Only, 3 = Right Only -INPUT_7_TYPE int(11) signed 0 = Analog, 1 = AES/EBU, - 2 = SP/DIFF -INPUT_7_LEVEL int(11) signed Gain offset, in 1/100 dB -INPUT_7_MODE int(11) signed 0 = Normal, 1 = Swap, - 2 = Left Only, 3 = Right Only -OUTPUT_0_LEVEL int(11) signed Gain offset, in 1/100 dB -OUTPUT_1_LEVEL int(11) signed Gain offset, in 1/100 dB -OUTPUT_2_LEVEL int(11) signed Gain offset, in 1/100 dB -OUTPUT_3_LEVEL int(11) signed Gain offset, in 1/100 dB -OUTPUT_4_LEVEL int(11) signed Gain offset, in 1/100 dB -OUTPUT_5_LEVEL int(11) signed Gain offset, in 1/100 dB -OUTPUT_6_LEVEL int(11) signed Gain offset, in 1/100 dB -OUTPUT_7_LEVEL int(11) signed Gain offset, in 1/100 dB diff --git a/docs/tables/stations.txt b/docs/tables/stations.txt index 17c75ec2..0873add9 100644 --- a/docs/tables/stations.txt +++ b/docs/tables/stations.txt @@ -45,35 +45,3 @@ HAVE_MP4_DECODE enum('N','Y') HPI_VERSION char(16) JACK_VERSION char(16) ALSA_VERSION char(16) -CARD0_DRIVER int(11) signed 0=None, 1=Hpi, 2=Jack, 3=ALSA -CARD0_NAME char(64) -CARD0_INPUTS int(11) signed -CARD0_OUTPUTS int(11) signed -CARD1_DRIVER int(11) signed 0=None, 1=Hpi, 2=Jack, 3=ALSA -CARD1_NAME char(64) -CARD1_INPUTS int(11) signed -CARD1_OUTPUTS int(11) signed -CARD2_DRIVER int(11) signed 0=None, 1=Hpi, 2=Jack, 3=ALSA -CARD2_NAME char(64) -CARD2_INPUTS int(11) signed -CARD2_OUTPUTS int(11) signed -CARD3_DRIVER int(11) signed 0=None, 1=Hpi, 2=Jack, 3=ALSA -CARD3_NAME char(64) -CARD3_INPUTS int(11) signed -CARD3_OUTPUTS int(11) signed -CARD4_DRIVER int(11) signed 0=None, 1=Hpi, 2=Jack, 3=ALSA -CARD4_NAME char(64) -CARD4_INPUTS int(11) signed -CARD4_OUTPUTS int(11) signed -CARD5_DRIVER int(11) signed 0=None, 1=Hpi, 2=Jack, 3=ALSA -CARD5_NAME char(64) -CARD5_INPUTS int(11) signed -CARD5_OUTPUTS int(11) signed -CARD6_DRIVER int(11) signed 0=None, 1=Hpi, 2=Jack, 3=ALSA -CARD6_NAME char(64) -CARD6_INPUTS int(11) signed -CARD6_OUTPUTS int(11) signed -CARD7_DRIVER int(11) signed 0=None, 1=Hpi, 2=Jack, 3=ALSA -CARD7_NAME char(64) -CARD7_INPUTS int(11) signed -CARD7_OUTPUTS int(11) signed diff --git a/lib/dbversion.h b/lib/dbversion.h index 593d588c..e3bba700 100644 --- a/lib/dbversion.h +++ b/lib/dbversion.h @@ -24,7 +24,7 @@ /* * Current Database Version */ -#define RD_VERSION_DATABASE 281 +#define RD_VERSION_DATABASE 283 #endif // DBVERSION_H diff --git a/lib/rdaudio_port.cpp b/lib/rdaudio_port.cpp index 4ba3c13c..d5e545d5 100644 --- a/lib/rdaudio_port.cpp +++ b/lib/rdaudio_port.cpp @@ -2,7 +2,7 @@ // // Abstract a Rivendell Audio Port. // -// (C) Copyright 2002-2003,2016 Fred Gleason +// (C) Copyright 2002-2003,2016-2018 Fred Gleason // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as @@ -19,35 +19,15 @@ // #include #include - +#include // // Global Classes // -RDAudioPort::RDAudioPort(QString station,int card,bool create) +RDAudioPort::RDAudioPort(QString station,int card) { - RDSqlQuery *q; - QString sql; - port_station=station; port_card=card; - - if(create) { - sql=QString().sprintf("select ID from AUDIO_PORTS where \ -(STATION_NAME=\"%s\")&&(CARD_NUMBER=%d)",(const char *)port_station,port_card); - q=new RDSqlQuery(sql); - if(q->size()!=1) { - delete q; - sql=QString().sprintf("INSERT INTO AUDIO_PORTS SET STATION_NAME=\"%s\",\ -CARD_NUMBER=%d", - (const char *)port_station,port_card); - q=new RDSqlQuery(sql); - delete q; - } - else { - delete q; - } - } } @@ -65,23 +45,43 @@ int RDAudioPort::card() const RDCae::ClockSource RDAudioPort::clockSource() { - return (RDCae::ClockSource)GetIntValue("CLOCK_SOURCE"); + RDCae::ClockSource ret=RDCae::InternalClock; + QString sql=QString("select CLOCK_SOURCE from AUDIO_CARDS where ")+ + "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",port_card); + RDSqlQuery *q=new RDSqlQuery(sql); + if(q->first()) { + ret=(RDCae::ClockSource)q->value(0).toInt(); + } + + return ret; } void RDAudioPort::setClockSource(RDCae::ClockSource src) { - SetRow("CLOCK_SOURCE",(int)src); + QString sql=QString("update AUDIO_CARDS set ")+ + QString().sprintf("CLOCK_SOURCE=%d where ",src)+ + "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",port_card); + RDSqlQuery *q=new RDSqlQuery(sql); + delete q; } RDAudioPort::PortType RDAudioPort::inputPortType(int port) { - if(port<0) { - return RDAudioPort::Analog; + RDAudioPort::PortType ret=RDAudioPort::Analog; + QString sql=QString("select TYPE from AUDIO_INPUTS where ")+ + "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d && ",port_card)+ + QString().sprintf("PORT_NUMBER=%d",port); + RDSqlQuery *q=new RDSqlQuery(sql); + if(q->first()) { + ret=(RDAudioPort::PortType)q->value(0).toInt(); } - return - (RDAudioPort::PortType)GetIntValue(QString().sprintf("INPUT_%d_TYPE",port)); + + return ret; } @@ -90,17 +90,29 @@ void RDAudioPort::setInputPortType(int port,RDAudioPort::PortType type) if(port<0) { return; } - SetRow(QString().sprintf("INPUT_%d_TYPE",port),(int)type); + QString sql=QString("update AUDIO_INPUTS set ")+ + QString().sprintf("TYPE=%d where ",type)+ + "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d && ",port_card)+ + QString().sprintf("PORT_NUMBER=%d",port); + RDSqlQuery *q=new RDSqlQuery(sql); + delete q; } RDCae::ChannelMode RDAudioPort::inputPortMode(int port) { - if(port<0) { - return RDCae::Normal; + RDCae::ChannelMode ret=RDCae::Normal; + QString sql=QString("select MODE from AUDIO_INPUTS where ")+ + "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d && ",port_card)+ + QString().sprintf("PORT_NUMBER=%d",port); + RDSqlQuery *q=new RDSqlQuery(sql); + if(q->first()) { + ret=(RDCae::ChannelMode)q->value(0).toInt(); } - return - (RDCae::ChannelMode)GetIntValue(QString().sprintf("INPUT_%d_MODE",port)); + + return ret; } @@ -109,7 +121,13 @@ void RDAudioPort::setInputPortMode(int port,RDCae::ChannelMode mode) if(port<0) { return; } - SetRow(QString().sprintf("INPUT_%d_MODE",port),(int)mode); + QString sql=QString("update AUDIO_INPUTS set ")+ + QString().sprintf("MODE=%d where ",mode)+ + "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d && ",port_card)+ + QString().sprintf("PORT_NUMBER=%d",port); + RDSqlQuery *q=new RDSqlQuery(sql); + delete q; } @@ -118,7 +136,17 @@ int RDAudioPort::inputPortLevel(int port) if(port<0) { return 400; } - return GetIntValue(QString().sprintf("INPUT_%d_LEVEL",port)); + int ret=400; + QString sql=QString("select LEVEL from AUDIO_INPUTS where ")+ + "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d && ",port_card)+ + QString().sprintf("PORT_NUMBER=%d",port); + RDSqlQuery *q=new RDSqlQuery(sql); + if(q->first()) { + ret=q->value(0).toInt(); + } + + return ret; } @@ -127,7 +155,13 @@ void RDAudioPort::setInputPortLevel(int port,int level) if(port<0) { return; } - SetRow(QString().sprintf("INPUT_%d_LEVEL",port),level); + QString sql=QString("update AUDIO_INPUTS set ")+ + QString().sprintf("LEVEL=%d where ",level)+ + "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d && ",port_card)+ + QString().sprintf("PORT_NUMBER=%d",port); + RDSqlQuery *q=new RDSqlQuery(sql); + delete q; } @@ -136,7 +170,17 @@ int RDAudioPort::outputPortLevel(int port) if(port<0) { return 400; } - return GetIntValue(QString().sprintf("OUTPUT_%d_LEVEL",port)); + int ret=400; + QString sql=QString("select LEVEL from AUDIO_OUTPUTS where ")+ + "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d && ",port_card)+ + QString().sprintf("PORT_NUMBER=%d",port); + RDSqlQuery *q=new RDSqlQuery(sql); + if(q->first()) { + ret=q->value(0).toInt(); + } + + return ret; } @@ -145,43 +189,11 @@ void RDAudioPort::setOutputPortLevel(int port,int level) if(port<0) { return; } - SetRow(QString().sprintf("OUTPUT_%d_LEVEL",port),level); -} - - -int RDAudioPort::GetIntValue(QString field) -{ - QString sql; - RDSqlQuery *q; - int accum; - - sql=QString().sprintf("select %s from AUDIO_PORTS where \ -(STATION_NAME=\"%s\")&&(CARD_NUMBER=%d)",(const char *)field, - (const char *)port_station,port_card); - q=new RDSqlQuery(sql); - if(q->first()) { - accum=q->value(0).toInt(); - delete q; - return accum; - } - delete q; - return 0; -} - - -void RDAudioPort::SetRow(QString param,int value) -{ - RDSqlQuery *q; - QString sql; - - sql=QString().sprintf("UPDATE AUDIO_PORTS SET %s=%d \ -WHERE (STATION_NAME=\"%s\")&&(CARD_NUMBER=%d)", - (const char *)param, - value, - (const char *)port_station, - port_card); - q=new RDSqlQuery(sql); + QString sql=QString("update AUDIO_OUTPUTS set ")+ + QString().sprintf("LEVEL=%d where ",level)+ + "STATION_NAME=\""+RDEscapeString(port_station)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d && ",port_card)+ + QString().sprintf("PORT_NUMBER=%d",port); + RDSqlQuery *q=new RDSqlQuery(sql); delete q; } - - diff --git a/lib/rdaudio_port.h b/lib/rdaudio_port.h index 7bc02667..060d5cd0 100644 --- a/lib/rdaudio_port.h +++ b/lib/rdaudio_port.h @@ -2,7 +2,7 @@ // // Abstract a Rivendell Audio Port // -// (C) Copyright 2002-2003,2016 Fred Gleason +// (C) Copyright 2002-2003,2016-2018 Fred Gleason // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as @@ -28,7 +28,7 @@ class RDAudioPort { public: enum PortType {Analog=0,AesEbu=1,SpDiff=2}; - RDAudioPort(QString station,int card,bool create=false); + RDAudioPort(QString station,int card); QString station() const; int card() const; RDCae::ClockSource clockSource(); @@ -43,8 +43,6 @@ class RDAudioPort void setOutputPortLevel(int port,int level); private: - int GetIntValue(QString field); - void SetRow(QString param,int value); QString port_station; int port_card; }; diff --git a/lib/rdstation.cpp b/lib/rdstation.cpp index dc142a9e..0c0f0ae4 100644 --- a/lib/rdstation.cpp +++ b/lib/rdstation.cpp @@ -540,21 +540,12 @@ int RDStation::cards() const { int n=0; - QString sql=QString().sprintf("select CARD0_DRIVER,CARD1_DRIVER,\ - CARD2_DRIVER,CARD3_DRIVER,CARD4_DRIVER,\ - CARD5_DRIVER,CARD6_DRIVER,CARD7_DRIVER\ - from STATIONS where NAME=\"%s\"", - (const char *)station_name); + QString sql=QString("select DRIVER from AUDIO_CARDS where ")+ + "STATION_NAME=\""+RDEscapeString(station_name)+"\""; RDSqlQuery *q=new RDSqlQuery(sql); - if(q->first()) { - for(int i=0;ivalue(i).toInt()!=RDStation::None) { - n++; - } - else { - delete q; - return n; - } + while(q->next()) { + if((RDStation::AudioDriver)q->value(0).toInt()!=RDStation::None) { + n++; } } delete q; @@ -565,16 +556,28 @@ int RDStation::cards() const RDStation::AudioDriver RDStation::cardDriver(int cardnum) const { - return (RDStation::AudioDriver) - RDGetSqlValue("STATIONS","NAME",station_name, - QString().sprintf("CARD%d_DRIVER",cardnum)). - toInt(); + RDStation::AudioDriver ret=RDStation::None; + QString sql=QString("select DRIVER from AUDIO_CARDS where ")+ + "STATION_NAME=\""+RDEscapeString(station_name)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",cardnum); + RDSqlQuery *q=new RDSqlQuery(sql); + if(q->first()) { + ret=(RDStation::AudioDriver)q->value(0).toInt(); + } + delete q; + + return ret; } void RDStation::setCardDriver(int cardnum,AudioDriver driver) const { - SetRow(QString().sprintf("CARD%d_DRIVER",cardnum),(int)driver); + QString sql=QString("update AUDIO_CARDS set ")+ + QString().sprintf("DRIVER=%d where ",driver)+ + "STATION_NAME=\""+RDEscapeString(station_name)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",cardnum); + RDSqlQuery *q=new RDSqlQuery(sql); + delete q; } @@ -623,40 +626,82 @@ void RDStation::setDriverVersion(AudioDriver driver,QString ver) const QString RDStation::cardName(int cardnum) const { - return RDGetSqlValue("STATIONS","NAME",station_name, - QString().sprintf("CARD%d_NAME",cardnum)).toString(); + QString ret; + QString sql=QString("select NAME from AUDIO_CARDS where ")+ + "STATION_NAME=\""+RDEscapeString(station_name)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",cardnum); + RDSqlQuery *q=new RDSqlQuery(sql); + if(q->first()) { + ret=q->value(0).toString(); + } + delete q; + + return ret; } void RDStation::setCardName(int cardnum,QString name) const { - SetRow(QString().sprintf("CARD%d_NAME",cardnum),name); + QString sql=QString("update AUDIO_CARDS set ")+ + "NAME=\""+RDEscapeString(name)+"\" where "+ + "STATION_NAME=\""+RDEscapeString(station_name)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",cardnum); + RDSqlQuery *q=new RDSqlQuery(sql); + delete q; } int RDStation::cardInputs(int cardnum) const { - return RDGetSqlValue("STATIONS","NAME",station_name, - QString().sprintf("CARD%d_INPUTS",cardnum)).toInt(); + int ret=-1; + QString sql=QString("select INPUTS from AUDIO_CARDS where ")+ + "STATION_NAME=\""+RDEscapeString(station_name)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",cardnum); + RDSqlQuery *q=new RDSqlQuery(sql); + if(q->first()) { + ret=q->value(0).toInt(); + } + delete q; + + return ret; } void RDStation::setCardInputs(int cardnum,int inputs) const { - SetRow(QString().sprintf("CARD%d_INPUTS",cardnum),inputs); + QString sql=QString("update AUDIO_CARDS set ")+ + QString().sprintf("INPUTS=%d where ",inputs)+ + "STATION_NAME=\""+RDEscapeString(station_name)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",cardnum); + RDSqlQuery *q=new RDSqlQuery(sql); + delete q; } int RDStation::cardOutputs(int cardnum) const { - return RDGetSqlValue("STATIONS","NAME",station_name, - QString().sprintf("CARD%d_OUTPUTS",cardnum)).toInt(); + int ret=-1; + QString sql=QString("select OUTPUTS from AUDIO_CARDS where ")+ + "STATION_NAME=\""+RDEscapeString(station_name)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",cardnum); + RDSqlQuery *q=new RDSqlQuery(sql); + if(q->first()) { + ret=q->value(0).toInt(); + } + delete q; + + return ret; } void RDStation::setCardOutputs(int cardnum,int outputs) const { - SetRow(QString().sprintf("CARD%d_OUTPUTS",cardnum),outputs); + QString sql=QString("update AUDIO_CARDS set ")+ + QString().sprintf("OUTPUTS=%d where ",outputs)+ + "STATION_NAME=\""+RDEscapeString(station_name)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",cardnum); + RDSqlQuery *q=new RDSqlQuery(sql); + delete q; } @@ -672,6 +717,38 @@ bool RDStation::create(const QString &name,QString *err_msg, addr.setAddress("127.0.0.1"); } + // + // Add Audio Cards + // + for(int i=0;inext()) { - sql=QString("insert into AUDIO_PORTS set ")+ - QString().sprintf("CARD_NUMBER=%u,",q->value(0).toUInt())+ - QString().sprintf("CLOCK_SOURCE=%d,",q->value(1).toInt())+ - "STATION_NAME=\""+RDEscapeString(name)+"\","; - for(int i=0;ivalue(2+3*i).toInt(), - i,q->value(3+3*i).toInt(), - i,q->value(4+3*i).toInt(), - i,q->value(5+3*i).toInt()); - } - sql=sql.left(sql.length()-1); - q1=new RDSqlQuery(sql); - delete q1; - } - delete q; - // // Clone the Serial Setups // @@ -1760,7 +1802,7 @@ bool RDStation::create(const QString &name,QString *err_msg, "LOG_RML "+ // 13 "from LOG_MACHINES where "+ "STATION_NAME=\""+RDEscapeString(exemplar)+"\""; - q=new RDSqlQuery(sql,false); + q=new RDSqlQuery(sql); while(q->next()) { sql=QString("insert into LOG_MACHINES set ")+ "STATION_NAME=\""+RDEscapeString(name)+"\","+ @@ -1778,10 +1820,72 @@ bool RDStation::create(const QString &name,QString *err_msg, QString().sprintf("UDP_PORT=%u,",q->value(11).toUInt())+ "UDP_STRING=\""+RDEscapeString(q->value(12).toString())+"\","+ "LOG_RML=\""+RDEscapeString(q->value(13).toString())+"\""; - q1=new RDSqlQuery(sql,false); + q1=new RDSqlQuery(sql); delete q1; } delete q; + + // + // Clone Audio Cards + // + sql=QString("select CARD_NUMBER,CLOCK_SOURCE from AUDIO_CARDS where ")+ + "STATION_NAME=\""+RDEscapeString(exemplar)+"\""; + q=new RDSqlQuery(sql); + while(q->next()) { + sql=QString("update AUDIO_CARDS set ")+ + QString().sprintf("CLOCK_SOURCE=%d where ",q->value(1).toInt())+ + "STATION_NAME=\""+RDEscapeString(name)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",q->value(0).toInt()); + q1=new RDSqlQuery(sql); + delete q1; + } + delete q; + + // + // Clone Audio Inputs + // + sql=QString("select ")+ + "CARD_NUMBER,"+ // 00 + "PORT_NUMBER,"+ // 01 + "LEVEL,"+ // 02 + "TYPE,"+ // 03 + "MODE "+ // 04 + "from AUDIO_INPUTS where "+ + "STATION_NAME=\""+RDEscapeString(exemplar)+"\""; + q=new RDSqlQuery(sql); + while(q->next()) { + sql=QString("update AUDIO_INPUTS set ")+ + QString().sprintf("LEVEL=%d,",q->value(2).toInt())+ + QString().sprintf("TYPE=%d,",q->value(3).toInt())+ + QString().sprintf("MODE=%d where ",q->value(4).toInt())+ + "STATION_NAME=\""+RDEscapeString(name)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d && ",q->value(0).toInt())+ + QString().sprintf("PORT_NUMBER=%d",q->value(1).toInt()); + q1=new RDSqlQuery(sql); + delete q1; + } + delete q; + + // + // Clone Audio Outputs + // + sql=QString("select ")+ + "CARD_NUMBER,"+ // 00 + "PORT_NUMBER,"+ // 01 + "LEVEL "+ // 02 + "from AUDIO_OUTPUTS where "+ + "STATION_NAME=\""+RDEscapeString(exemplar)+"\""; + q=new RDSqlQuery(sql); + while(q->next()) { + sql=QString("update AUDIO_OUTPUTS set ")+ + QString().sprintf("LEVEL=%d where ",q->value(2).toInt())+ + "STATION_NAME=\""+RDEscapeString(name)+"\" && "+ + QString().sprintf("CARD_NUMBER=%d && ",q->value(0).toInt())+ + QString().sprintf("PORT_NUMBER=%d",q->value(1).toInt()); + q1=new RDSqlQuery(sql); + delete q1; + } + delete q; } return true; } @@ -1805,10 +1909,7 @@ void RDStation::remove(const QString &name) (const char *)RDEscapeString(name)); q=new RDSqlQuery(sql); delete q; - sql=QString().sprintf("delete from AUDIO_PORTS where STATION_NAME=\"%s\"", - (const char *)RDEscapeString(name)); - q=new RDSqlQuery(sql); - delete q; + sql=QString().sprintf("delete from RECORDINGS where STATION_NAME=\"%s\"", (const char *)RDEscapeString(name)); q=new RDSqlQuery(sql); @@ -1943,6 +2044,16 @@ void RDStation::remove(const QString &name) "STATION_NAME=\""+RDEscapeString(name)+"\""; q=new RDSqlQuery(sql); delete q; + + sql=QString("delete from AUDIO_INPUT where ")+ + "STATION_NAME=\""+RDEscapeString(name)+"\""; + q=new RDSqlQuery(sql); + delete q; + + sql=QString("delete from AUDIO_OUTPUTS where ")+ + "STATION_NAME=\""+RDEscapeString(name)+"\""; + q=new RDSqlQuery(sql); + delete q; } diff --git a/rdadmin/createdb.cpp b/rdadmin/createdb.cpp index 946f31c1..0605c5d9 100644 --- a/rdadmin/createdb.cpp +++ b/rdadmin/createdb.cpp @@ -407,38 +407,6 @@ bool CreateDb(QString name,QString pwd,RDConfig *config) "HPI_VERSION char(16),"+ "JACK_VERSION char(16),"+ "ALSA_VERSION char(16),"+ - "CARD0_DRIVER int(11) default 0,"+ - "CARD0_NAME char(64),"+ - "CARD0_INPUTS int default -1,"+ - "CARD0_OUTPUTS int default -1,"+ - "CARD1_DRIVER int(11) default 0,"+ - "CARD1_NAME char(64),"+ - "CARD1_INPUTS int default -1,"+ - "CARD1_OUTPUTS int default -1,"+ - "CARD2_DRIVER int(11) default 0,"+ - "CARD2_NAME char(64),"+ - "CARD2_INPUTS int default -1,"+ - "CARD2_OUTPUTS int default -1,"+ - "CARD3_DRIVER int(11) default 0,"+ - "CARD3_NAME char(64),"+ - "CARD3_INPUTS int default -1,"+ - "CARD3_OUTPUTS int default -1,"+ - "CARD4_DRIVER int(11) default 0,"+ - "CARD4_NAME char(64),"+ - "CARD4_INPUTS int default -1,"+ - "CARD4_OUTPUTS int default -1,"+ - "CARD5_DRIVER int(11) default 0,"+ - "CARD5_NAME char(64),"+ - "CARD5_INPUTS int default -1,"+ - "CARD5_OUTPUTS int default -1,"+ - "CARD6_DRIVER int(11) default 0,"+ - "CARD6_NAME char(64),"+ - "CARD6_INPUTS int default -1,"+ - "CARD6_OUTPUTS int default -1,"+ - "CARD7_DRIVER int(11) default 0,"+ - "CARD7_NAME char(64),"+ - "CARD7_INPUTS int default -1,"+ - "CARD7_OUTPUTS int default -1,"+ "INDEX DESCRIPTION_IDX (DESCRIPTION),"+ "index IPV4_ADDRESS_IDX (IPV4_ADDRESS))"+ config->createTablePostfix(); @@ -917,6 +885,7 @@ bool CreateDb(QString name,QString pwd,RDConfig *config) // // Create AUDIO_PORTS table // + /* sql=QString("create table if not exists AUDIO_PORTS (")+ "ID int unsigned not null primary key AUTO_INCREMENT,"+ "STATION_NAME char(64) not null,"+ @@ -960,7 +929,7 @@ bool CreateDb(QString name,QString pwd,RDConfig *config) if(!RunQuery(sql)) { return false; } - + */ // // Create LOGS table // @@ -2277,6 +2246,53 @@ bool CreateDb(QString name,QString pwd,RDConfig *config) return false; } + // + // Create AUDIO_CARDS table + // + sql=QString("create table if not exists AUDIO_CARDS (")+ + "ID int auto_increment not null primary key,"+ + "STATION_NAME char(64) not null,"+ + "CARD_NUMBER int not null,"+ + "DRIVER int not null default 0,"+ + "NAME char(64),"+ + "INPUTS int not null default -1,"+ + "OUTPUTS int not null default -1,"+ + "CLOCK_SOURCE int not null default 0,"+ + "unique index STATION_NAME_IDX(STATION_NAME,CARD_NUMBER))"; + if(!RunQuery(sql)) { + return false; + } + + // + // Create AUDIO_INPUTS table + // + sql=QString("create table if not exists AUDIO_INPUTS (")+ + "ID int auto_increment not null primary key,"+ + "STATION_NAME char(64) not null,"+ + "CARD_NUMBER int not null,"+ + "PORT_NUMBER int not null,"+ + "LEVEL int not null default 0,"+ + "TYPE int not null default 0," + "MODE int not null default 0,"+ + "unique index STATION_NAME_IDX(STATION_NAME,CARD_NUMBER,PORT_NUMBER))"; + if(!RunQuery(sql)) { + return false; + } + + // + // Create AUDIO_OUTPUTS table + // + sql=QString("create table if not exists AUDIO_OUTPUTS (")+ + "ID int auto_increment not null primary key,"+ + "STATION_NAME char(64) not null,"+ + "CARD_NUMBER int not null,"+ + "PORT_NUMBER int not null,"+ + "LEVEL int not null default 0,"+ + "unique index STATION_NAME_IDX(STATION_NAME,CARD_NUMBER,PORT_NUMBER))"; + if(!RunQuery(sql)) { + return false; + } + return true; } @@ -8215,6 +8231,173 @@ int UpdateDb(int ver,RDConfig *config) delete q; } + if(ver<282) { + sql=QString("create table if not exists AUDIO_CARDS (")+ + "ID int auto_increment not null primary key,"+ + "STATION_NAME char(64) not null,"+ + "CARD_NUMBER int not null,"+ + "DRIVER int not null default 0,"+ + "NAME char(64),"+ + "INPUTS int not null default -1,"+ + "OUTPUTS int not null default -1,"+ + "unique index STATION_NAME_IDX(STATION_NAME,CARD_NUMBER))"; + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("select NAME from STATIONS"); + q=new RDSqlQuery(sql,false); + while(q->next()) { + for(int i=0;ivalue(0).toString())+"\","+ + QString().sprintf("CARD_NUMBER=%d",i); + q1=new RDSqlQuery(sql,false); + delete q1; + } + } + delete q; + + for(int i=0;i<8;i++) { + sql=QString("alter table STATIONS drop column ")+ + QString().sprintf("CARD%d_DRIVER",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table STATIONS drop column ")+ + QString().sprintf("CARD%d_NAME",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table STATIONS drop column ")+ + QString().sprintf("CARD%d_INPUTS",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table STATIONS drop column ")+ + QString().sprintf("CARD%d_OUTPUTS",i); + q=new RDSqlQuery(sql,false); + delete q; + } + } + + if(ver<283) { + sql=QString("alter table AUDIO_CARDS add column ")+ + "CLOCK_SOURCE int not null default 0 after OUTPUTS"; + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("select ")+ + "STATION_NAME,"+ + "CARD_NUMBER,"+ + "CLOCK_SOURCE "+ + "from AUDIO_PORTS"; + q=new RDSqlQuery(sql,false); + while(q->next()) { + sql=QString("update AUDIO_CARDS set ")+ + QString().sprintf("CLOCK_SOURCE=%d where ",q->value(2).toInt())+ + "STATION_NAME=\""+RDEscapeString(q->value(0).toString())+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",q->value(1).toInt()); + q1=new RDSqlQuery(sql,false); + delete q1; + } + + sql=QString("create table if not exists AUDIO_INPUTS (")+ + "ID int auto_increment not null primary key,"+ + "STATION_NAME char(64) not null,"+ + "CARD_NUMBER int not null,"+ + "PORT_NUMBER int not null,"+ + "LEVEL int not null default 0,"+ + "TYPE int not null default 0," + "MODE int not null default 0,"+ + "unique index STATION_NAME_IDX(STATION_NAME,CARD_NUMBER,PORT_NUMBER))"; + q=new RDSqlQuery(sql,false); + delete q; + sql=QString("select NAME from STATIONS"); + q=new RDSqlQuery(sql,false); + while(q->next()) { + for(int i=0;i<24;i++) { + for(int j=0;j<24;j++) { + sql=QString("insert into AUDIO_INPUTS set ")+ + "STATION_NAME=\""+RDEscapeString(q->value(0).toString())+"\","+ + QString().sprintf("CARD_NUMBER=%d,",i)+ + QString().sprintf("PORT_NUMBER=%d",j); + q1=new RDSqlQuery(sql,false); + delete q1; + } + } + } + delete q; + for(int i=0;i<8;i++) { + sql=QString("select ")+ + "STATION_NAME,"+ // 00 + "CARD_NUMBER,"+ // 01 + QString().sprintf("INPUT_%d_LEVEL,",i)+ // 02 + QString().sprintf("INPUT_%d_TYPE,",i)+ // 03 + QString().sprintf("INPUT_%d_MODE ",i)+ // 04 + "from AUDIO_PORTS"; + q=new RDSqlQuery(sql,false); + while(q->next()) { + sql=QString("update AUDIO_INPUTS set ")+ + QString().sprintf("LEVEL=%d,",q->value(2).toInt())+ + QString().sprintf("TYPE=%d,",q->value(3).toInt())+ + QString().sprintf("MODE=%d where ",q->value(4).toInt())+ + "STATION_NAME=\""+RDEscapeString(q->value(0).toString())+"\" && "+ + QString().sprintf("CARD_NUMBER=%d && ",q->value(1).toInt())+ + QString().sprintf("PORT_NUMBER=%d",i); + q1=new RDSqlQuery(sql,false); + delete q1; + } + delete q; + } + + sql=QString("create table if not exists AUDIO_OUTPUTS (")+ + "ID int auto_increment not null primary key,"+ + "STATION_NAME char(64) not null,"+ + "CARD_NUMBER int not null,"+ + "PORT_NUMBER int not null,"+ + "LEVEL int not null default 0,"+ + "unique index STATION_NAME_IDX(STATION_NAME,CARD_NUMBER,PORT_NUMBER))"; + q=new RDSqlQuery(sql,false); + delete q; + sql=QString("select NAME from STATIONS"); + q=new RDSqlQuery(sql,false); + while(q->next()) { + for(int i=0;i<24;i++) { + for(int j=0;j<24;j++) { + sql=QString("insert into AUDIO_OUTPUTS set ")+ + "STATION_NAME=\""+RDEscapeString(q->value(0).toString())+"\","+ + QString().sprintf("CARD_NUMBER=%d,",i)+ + QString().sprintf("PORT_NUMBER=%d",j); + q1=new RDSqlQuery(sql,false); + delete q1; + } + } + } + for(int i=0;i<8;i++) { + sql=QString("select ")+ + "STATION_NAME,"+ // 00 + "CARD_NUMBER,"+ // 01 + QString().sprintf("OUTPUT_%d_LEVEL ",i)+ // 02 + "from AUDIO_PORTS"; + q=new RDSqlQuery(sql,false); + while(q->next()) { + sql=QString("update AUDIO_OUTPUTS set ")+ + QString().sprintf("LEVEL=%d where ",q->value(2).toInt())+ + "STATION_NAME=\""+RDEscapeString(q->value(0).toString())+"\" && "+ + QString().sprintf("CARD_NUMBER=%d && ",q->value(1).toInt())+ + QString().sprintf("PORT_NUMBER=%d",i); + q1=new RDSqlQuery(sql,false); + delete q1; + } + delete q; + } + + sql=QString("drop table AUDIO_PORTS"); + q=new RDSqlQuery(sql,false); + delete q; + } + + // // Maintainer's Note: diff --git a/rdadmin/edit_audios.cpp b/rdadmin/edit_audios.cpp index 5d15d576..56ec5a24 100644 --- a/rdadmin/edit_audios.cpp +++ b/rdadmin/edit_audios.cpp @@ -48,7 +48,7 @@ EditAudioPorts::EditAudioPorts(QString station,QWidget *parent) edit_card=NULL; rdstation=NULL; - setCaption(tr("Edit Audio Ports")); + setCaption(tr("Edit AudioScience Audio Ports")); // // Create Fonts @@ -91,7 +91,8 @@ EditAudioPorts::EditAudioPorts(QString station,QWidget *parent) edit_clock_label->setFont(font); edit_clock_label->setAlignment(AlignRight); - for(int j=0;jinsertItem(QString().sprintf("%d",i)); } edit_clock_box->insertItem(tr("Internal")); @@ -246,12 +248,17 @@ void EditAudioPorts::closeData() } +void EditAudioPorts::resizeEvent(QResizeEvent *e) +{ +} + + void EditAudioPorts::ReadRecord(int card) { if(edit_card!=NULL) { delete edit_card; } - edit_card=new RDAudioPort(edit_station,card,true); + edit_card=new RDAudioPort(edit_station,card); if(rdstation!=NULL) { delete rdstation; } @@ -264,7 +271,8 @@ void EditAudioPorts::ReadRecord(int card) card_driver_edit->setText("AudioScience HPI"); edit_clock_box->setEnabled(true); edit_clock_label->setEnabled(true); - for (int i=0;isetEnabled(true); edit_type_box[i]->setEnabled(true); edit_mode_label[i]->setEnabled(true); @@ -279,7 +287,8 @@ void EditAudioPorts::ReadRecord(int card) card_driver_edit->setText("JACK"); edit_clock_box->setDisabled(true); edit_clock_label->setDisabled(true); - for (int i=0;isetDisabled(true); edit_type_box[i]->setDisabled(true); edit_mode_label[i]->setEnabled(true); @@ -294,7 +303,8 @@ void EditAudioPorts::ReadRecord(int card) card_driver_edit->setText("ALSA"); edit_clock_box->setDisabled(true); edit_clock_label->setDisabled(true); - for (int i=0;isetDisabled(true); edit_type_box[i]->setDisabled(true); edit_mode_label[i]->setDisabled(true); @@ -310,7 +320,8 @@ void EditAudioPorts::ReadRecord(int card) card_driver_edit->setText("UNKNOWN"); edit_clock_box->setDisabled(true); edit_clock_label->setDisabled(true); - for (int i=0;isetDisabled(true); edit_type_box[i]->setDisabled(true); edit_mode_label[i]->setDisabled(true); @@ -323,7 +334,8 @@ void EditAudioPorts::ReadRecord(int card) break; } edit_clock_box->setCurrentItem(edit_card->clockSource()); - for(int i=0;isetCurrentItem((int)edit_card->inputPortType(i)); if( (rdstation->cardDriver(card)==RDStation::Hpi) && ((RDAudioPort::PortType)edit_type_box[i]->currentItem()== @@ -346,7 +358,8 @@ void EditAudioPorts::WriteRecord() { edit_card-> setClockSource((RDCae::ClockSource)edit_clock_box->currentItem()); - for(int i=0;isetInputPortType(i, (RDAudioPort::PortType)edit_type_box[i]->currentItem()); edit_card->setInputPortMode(i, diff --git a/rdadmin/edit_audios.h b/rdadmin/edit_audios.h index d63e72e2..c01c8954 100644 --- a/rdadmin/edit_audios.h +++ b/rdadmin/edit_audios.h @@ -2,7 +2,7 @@ // // Edit a Rivendell Audio Port Configuration // -// (C) Copyright 2002-2003,2016 Fred Gleason +// (C) Copyright 2002-2003,2016-2018 Fred Gleason // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as @@ -38,40 +38,43 @@ class EditAudioPorts : public QDialog { Q_OBJECT - public: - EditAudioPorts(QString station,QWidget *parent=0); - ~EditAudioPorts(); - QSize sizeHint() const; - QSizePolicy sizePolicy() const; + public: + EditAudioPorts(QString station,QWidget *parent=0); + ~EditAudioPorts(); + QSize sizeHint() const; + QSizePolicy sizePolicy() const; - private slots: - void cardSelectedData(int); - void inputMapData(int); - void helpData(); - void closeData(); + private slots: + void cardSelectedData(int); + void inputMapData(int); + void helpData(); + void closeData(); - private: - void ReadRecord(int card); - void WriteRecord(); - void SetEnable(bool state); - int edit_card_num; - RDAudioPort *edit_card; - RDStation *rdstation; - QString edit_station; - QComboBox *edit_card_box; - QLineEdit *card_driver_edit; - QComboBox *edit_clock_box; - QLabel *edit_clock_label; - QComboBox *edit_type_box[RD_MAX_PORTS]; - QLabel *edit_type_label[RD_MAX_PORTS]; - QComboBox *edit_mode_box[RD_MAX_PORTS]; - QLabel *edit_mode_label[RD_MAX_PORTS]; - QSpinBox *edit_input_box[RD_MAX_PORTS]; - QLabel *edit_input_label[RD_MAX_PORTS]; - QSpinBox *edit_output_box[RD_MAX_PORTS]; - QLabel *edit_output_label[RD_MAX_PORTS]; + protected: + void resizeEvent(QResizeEvent *e); + + private: + void ReadRecord(int card); + void WriteRecord(); + void SetEnable(bool state); + int edit_card_num; + RDAudioPort *edit_card; + RDStation *rdstation; + QString edit_station; + QComboBox *edit_card_box; + QLineEdit *card_driver_edit; + QComboBox *edit_clock_box; + QLabel *edit_clock_label; + QComboBox *edit_type_box[RD_MAX_PORTS]; + QLabel *edit_type_label[RD_MAX_PORTS]; + QComboBox *edit_mode_box[RD_MAX_PORTS]; + QLabel *edit_mode_label[RD_MAX_PORTS]; + QSpinBox *edit_input_box[RD_MAX_PORTS]; + QLabel *edit_input_label[RD_MAX_PORTS]; + QSpinBox *edit_output_box[RD_MAX_PORTS]; + QLabel *edit_output_label[RD_MAX_PORTS]; }; -#endif +#endif // EDIT_AUDIO_H diff --git a/rdadmin/edit_station.cpp b/rdadmin/edit_station.cpp index d989d0e0..eee315f9 100644 --- a/rdadmin/edit_station.cpp +++ b/rdadmin/edit_station.cpp @@ -402,7 +402,7 @@ EditStation::EditStation(QString sname,QWidget *parent) // station_audioports_button=new QPushButton(this); station_audioports_button->setFont(font); - station_audioports_button->setText(tr("Audio\nPorts")); + station_audioports_button->setText(tr("ASI Audio\nPorts")); connect(station_audioports_button,SIGNAL(clicked()), this,SLOT(editAudioData())); diff --git a/rdadmin/rdadmin_cs.ts b/rdadmin/rdadmin_cs.ts index f70cce7f..218762ac 100644 --- a/rdadmin/rdadmin_cs.ts +++ b/rdadmin/rdadmin_cs.ts @@ -672,7 +672,7 @@ a záloha původní databáze uložena v EditAudioPorts Edit Audio Ports - Upravit přípojky zvuku + Upravit přípojky zvuku Clock Source: @@ -766,6 +766,10 @@ a záloha původní databáze uložena v Ref. Level: + + Edit AudioScience Audio Ports + + EditAuxField @@ -3656,7 +3660,7 @@ zvuku Audio Ports - Zvukové + Zvukové přípojky @@ -3794,6 +3798,11 @@ nastaveném pro běh služby CAE pro naplnění databáze se zdroji zvuku.Short Name: + + ASI Audio +Ports + + EditSvc diff --git a/rdadmin/rdadmin_de.ts b/rdadmin/rdadmin_de.ts index 0a5e9510..e87edb73 100644 --- a/rdadmin/rdadmin_de.ts +++ b/rdadmin/rdadmin_de.ts @@ -638,7 +638,7 @@ worden. Aktuelle Version EditAudioPorts Edit Audio Ports - Audioports editieren + Audioports editieren Clock Source: @@ -732,6 +732,10 @@ worden. Aktuelle Version Ref. Level: + + Edit AudioScience Audio Ports + + EditAuxField @@ -3608,7 +3612,7 @@ Ressourcen Audio Ports - Audio + Audio Ports @@ -3743,6 +3747,11 @@ configured to run the CAE service in order to populate the audio resources datab Short Name: + + ASI Audio +Ports + + EditSvc diff --git a/rdadmin/rdadmin_es.ts b/rdadmin/rdadmin_es.ts index 10b598a4..298dc0e2 100644 --- a/rdadmin/rdadmin_es.ts +++ b/rdadmin/rdadmin_es.ts @@ -672,7 +672,7 @@ y un respaldo de la base de datos se guardó en EditAudioPorts Edit Audio Ports - Editar Puertos de Audio + Editar Puertos de Audio Clock Source: @@ -766,6 +766,10 @@ y un respaldo de la base de datos se guardó en Ref. Level: + + Edit AudioScience Audio Ports + + EditAuxField @@ -3647,7 +3651,7 @@ de audio Audio Ports - Puertos + Puertos de audio @@ -3791,6 +3795,11 @@ configured to run the CAE service in order to populate the audio resources datab Short Name: + + ASI Audio +Ports + + EditSvc diff --git a/rdadmin/rdadmin_fr.ts b/rdadmin/rdadmin_fr.ts index e2d8880c..068b7bb5 100644 --- a/rdadmin/rdadmin_fr.ts +++ b/rdadmin/rdadmin_fr.ts @@ -437,10 +437,6 @@ EditAudioPorts - - Edit Audio Ports - - Clock Source: @@ -529,6 +525,10 @@ Ref. Level: + + Edit AudioScience Audio Ports + + EditAuxField @@ -3264,11 +3264,6 @@ Overwrite? Resources - - Audio -Ports - - Serial Ports @@ -3380,6 +3375,11 @@ configured to run the CAE service in order to populate the audio resources datab Short Name: + + ASI Audio +Ports + + EditSvc diff --git a/rdadmin/rdadmin_nb.ts b/rdadmin/rdadmin_nb.ts index 77c8a17b..6ec825c0 100644 --- a/rdadmin/rdadmin_nb.ts +++ b/rdadmin/rdadmin_nb.ts @@ -620,7 +620,7 @@ oppdatert til versjon EditAudioPorts Edit Audio Ports - Rediger lydportar + Rediger lydportar Clock Source: @@ -714,6 +714,10 @@ oppdatert til versjon Ref. Level: + + Edit AudioScience Audio Ports + + EditAuxField @@ -3606,7 +3610,7 @@ Resources Audio Ports - Lydportar + Lydportar Serial @@ -3721,6 +3725,11 @@ configured to run the CAE service in order to populate the audio resources datab Short Name: + + ASI Audio +Ports + + EditSvc diff --git a/rdadmin/rdadmin_nn.ts b/rdadmin/rdadmin_nn.ts index 77c8a17b..6ec825c0 100644 --- a/rdadmin/rdadmin_nn.ts +++ b/rdadmin/rdadmin_nn.ts @@ -620,7 +620,7 @@ oppdatert til versjon EditAudioPorts Edit Audio Ports - Rediger lydportar + Rediger lydportar Clock Source: @@ -714,6 +714,10 @@ oppdatert til versjon Ref. Level: + + Edit AudioScience Audio Ports + + EditAuxField @@ -3606,7 +3610,7 @@ Resources Audio Ports - Lydportar + Lydportar Serial @@ -3721,6 +3725,11 @@ configured to run the CAE service in order to populate the audio resources datab Short Name: + + ASI Audio +Ports + + EditSvc diff --git a/rdadmin/rdadmin_pt_BR.ts b/rdadmin/rdadmin_pt_BR.ts index e2635c45..12d21261 100644 --- a/rdadmin/rdadmin_pt_BR.ts +++ b/rdadmin/rdadmin_pt_BR.ts @@ -621,7 +621,7 @@ atualizada para a Versão EditAudioPorts Edit Audio Ports - Editar Portas de Áudio + Editar Portas de Áudio Clock Source: @@ -715,6 +715,10 @@ atualizada para a Versão Ref. Level: + + Edit AudioScience Audio Ports + + EditAuxField @@ -3622,7 +3626,7 @@ do Cliente Audio Ports - Portas de + Portas de Áudio @@ -3736,6 +3740,11 @@ configured to run the CAE service in order to populate the audio resources datab Short Name: + + ASI Audio +Ports + + EditSvc diff --git a/utils/rdrevert/rdrevert.cpp b/utils/rdrevert/rdrevert.cpp index e17851d9..a7a3baba 100644 --- a/utils/rdrevert/rdrevert.cpp +++ b/utils/rdrevert/rdrevert.cpp @@ -283,6 +283,14 @@ void MainObject::Revert(int schema) const case 281: Revert281(); break; + + case 282: + Revert282(); + break; + + case 283: + Revert283(); + break; } } @@ -1056,6 +1064,170 @@ void MainObject::Revert281() const } +void MainObject::Revert282() const +{ + QString sql; + RDSqlQuery *q; + + for(int i=7;i>=0;i--) { + sql=QString("alter table STATIONS add column ")+ + QString().sprintf("CARD%d_OUTPUTS int default -1 after ALSA_VERSION",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table STATIONS add column ")+ + QString().sprintf("CARD%d_INPUTS int default -1 after ALSA_VERSION",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table STATIONS add column ")+ + QString().sprintf("CARD%d_NAME char(64) after ALSA_VERSION",i); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("alter table STATIONS add column ")+ + QString().sprintf("CARD%d_DRIVER int default 0 after ALSA_VERSION",i); + q=new RDSqlQuery(sql,false); + delete q; + } + + sql=QString("drop table AUDIO_CARDS"); + q=new RDSqlQuery(sql,false); + delete q; + + SetVersion(281); +} + + +void MainObject::Revert283() const +{ + QString sql; + RDSqlQuery *q; + RDSqlQuery *q1; + + sql=QString("create table if not exists AUDIO_PORTS (")+ + "ID int unsigned not null primary key AUTO_INCREMENT,"+ + "STATION_NAME char(64) not null,"+ + "CARD_NUMBER int not null,"+ + "CLOCK_SOURCE int default 0,"+ + "INPUT_0_LEVEL int default 0,"+ + "INPUT_0_TYPE int default 0,"+ + "INPUT_0_MODE int default 0,"+ + "INPUT_1_LEVEL int default 0,"+ + "INPUT_1_TYPE int default 0,"+ + "INPUT_1_MODE int default 0,"+ + "INPUT_2_LEVEL int default 0,"+ + "INPUT_2_TYPE int default 0,"+ + "INPUT_2_MODE int default 0,"+ + "INPUT_3_LEVEL int default 0,"+ + "INPUT_3_TYPE int default 0,"+ + "INPUT_3_MODE int default 0,"+ + "INPUT_4_LEVEL int default 0,"+ + "INPUT_4_TYPE int default 0,"+ + "INPUT_4_MODE int default 0,"+ + "INPUT_5_LEVEL int default 0,"+ + "INPUT_5_TYPE int default 0,"+ + "INPUT_5_MODE int default 0,"+ + "INPUT_6_LEVEL int default 0,"+ + "INPUT_6_TYPE int default 0,"+ + "INPUT_6_MODE int default 0,"+ + "INPUT_7_LEVEL int default 0,"+ + "INPUT_7_TYPE int default 0,"+ + "INPUT_7_MODE int default 0,"+ + "OUTPUT_0_LEVEL int default 0,"+ + "OUTPUT_1_LEVEL int default 0,"+ + "OUTPUT_2_LEVEL int default 0,"+ + "OUTPUT_3_LEVEL int default 0,"+ + "OUTPUT_4_LEVEL int default 0,"+ + "OUTPUT_5_LEVEL int default 0,"+ + "OUTPUT_6_LEVEL int default 0,"+ + "OUTPUT_7_LEVEL int default 0,"+ + "index STATION_NAME_IDX (STATION_NAME),"+ + "index CARD_NUMBER_IDX (CARD_NUMBER))"+ + rev_config->createTablePostfix(); + q=new RDSqlQuery(sql,false); + delete q; + sql=QString("select NAME from STATIONS"); + q=new RDSqlQuery(sql,false); + while(q->next()) { + for(int i=0;i<8;i++) { + sql=QString("insert into AUDIO_PORTS set ")+ + "STATION_NAME=\""+RDEscapeString(q->value(0).toString())+"\","+ + QString().sprintf("CARD_NUMBER=%d",i); + q1=new RDSqlQuery(sql,false); + delete q1; + } + } + delete q; + sql=QString("select ")+ + "STATION_NAME,"+ // 00 + "CARD_NUMBER,"+ // 01 + "PORT_NUMBER,"+ // 02 + "LEVEL,"+ // 03 + "TYPE,"+ // 04 + "MODE "+ // 05 + "from AUDIO_INPUTS where PORT_NUMBER<8"; + q=new RDSqlQuery(sql,false); + while(q->next()) { + sql=QString("update AUDIO_PORTS set ")+ + QString().sprintf("INPUT_%d_LEVEL=%d,", + q->value(2).toInt(),q->value(3).toInt())+ + QString().sprintf("INPUT_%d_TYPE=%d,", + q->value(2).toInt(),q->value(4).toInt())+ + QString().sprintf("INPUT_%d_MODE=%d where ", + q->value(2).toInt(),q->value(5).toInt())+ + "STATION_NAME=\""+RDEscapeString(q->value(0).toString())+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",q->value(1).toInt()); + } + delete q; + sql=QString("drop table AUDIO_INPUTS"); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("select ")+ + "STATION_NAME,"+ // 00 + "CARD_NUMBER,"+ // 01 + "PORT_NUMBER,"+ // 02 + "LEVEL "+ // 03 + "from AUDIO_OUTPUTS where PORT_NUMBER<8"; + q=new RDSqlQuery(sql,false); + while(q->next()) { + sql=QString("update AUDIO_PORTS set ")+ + QString().sprintf("OUTPUT_%d_LEVEL=%d where ", + q->value(2).toInt(),q->value(3).toInt())+ + "STATION_NAME=\""+RDEscapeString(q->value(0).toString())+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",q->value(1).toInt()); + q1=new RDSqlQuery(sql,false); + delete q1; + } + delete q; + sql=QString("drop table AUDIO_OUTPUTS"); + q=new RDSqlQuery(sql,false); + delete q; + + sql=QString("select ")+ + "STATION_NAME,"+ // 00 + "CARD_NUMBER,"+ // 01 + "CLOCK_SOURCE "+ // 02 + "from AUDIO_CARDS where CARD_NUMBER<8"; + q=new RDSqlQuery(sql,false); + while(q->next()) { + sql=QString("update AUDIO_PORTS set ")+ + QString().sprintf("CLOCK_SOURCE=%d where ",q->value(2).toInt())+ + "STATION_NAME=\""+RDEscapeString(q->value(0).toString())+"\" && "+ + QString().sprintf("CARD_NUMBER=%d",q->value(1).toInt()); + q1=new RDSqlQuery(sql,false); + delete q1; + } + delete q; + sql=QString("alter table AUDIO_CARDS drop column CLOCK_SOURCE"); + q=new RDSqlQuery(sql,false); + delete q; + + SetVersion(282); +} + + int MainObject::GetVersion() const { QString sql; @@ -1102,7 +1274,7 @@ int MainObject::MapSchema(const QString &ver) version_map["2.17"]=268; version_map["2.18"]=272; version_map["2.19"]=275; - version_map["2.20"]=281; + version_map["2.20"]=283; // // Normalize String diff --git a/utils/rdrevert/rdrevert.h b/utils/rdrevert/rdrevert.h index 45591b74..96c911f7 100644 --- a/utils/rdrevert/rdrevert.h +++ b/utils/rdrevert/rdrevert.h @@ -77,6 +77,8 @@ class MainObject : public QObject void Revert279() const; void Revert280() const; void Revert281() const; + void Revert282() const; + void Revert283() const; int GetVersion() const; void SetVersion(int schema) const; int MapSchema(const QString &ver);