diff --git a/ChangeLog b/ChangeLog index 01d7c0ba..eea4430e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16757,3 +16757,16 @@ 2018-03-25 Fred Gleason * Removed the conditional installation of 'rdalsaconfig-root' when building RPMs. +2018-03-30 Fred Gleason + * Added support for DMA bus-mastering to the HPI driver. +2018-03-30 Fred Gleason + * Updated switch() statement formatting in 'rdhpi/'. +2018-03-30 Fred Gleason + * Fixed a bug in rdlogmanager(1) that caused DB corruption when + a clock was deleted while still being assigned to a grid. +2018-03-30 Fred Gleason + * Removed rdhpiinfo(8). +2018-03-30 Fred Gleason + * Removed event checks when update Playout events in rdcatch(1). +2018-03-30 Fred Gleason + * Updated the date in the copyright notice in rdadmin(1). diff --git a/NEWS b/NEWS index a251afba..e42ab1df 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,29 @@ The NEWS file for the Rivendell package. +------------------------------------------------------------------------------- +v2.19.1 -- 3/27/2018 + +Changes: + HPI Support. Implemented support for DMA bus-mastering for AudioScience + HPI devices. + + RDHpiInfo. Removed rdhpiinfo(8). Replaced by the stand-alone 'hpiinfo' + package. + + RDCatch Play Events. Removed the event time check for Playout events in + rdcatch(1), as there is no sane way to determine a consistently 'free' + playout time in the face of shifting cut lengths. + + RDLogManager. Fixed a bug in rdlogmanager(1) that caused DB corruption + when a clock was deleted while still being assigned to a grid. + +Database Update: + This version of Rivendell uses database schema version 275, and will + automatically upgrade any earlier versions. To see the current schema + version prior to upgrade, see RDAdmin->SystemInfo. + + As always, be sure to run RDAdmin immediately after upgrading to allow + any necessary changes to the database schema to be applied. ------------------------------------------------------------------------------- v2.19.0 -- 2/22/2018 diff --git a/PACKAGE_VERSION b/PACKAGE_VERSION index 92aa628b..7965242b 100644 --- a/PACKAGE_VERSION +++ b/PACKAGE_VERSION @@ -1 +1 @@ -2.19.0 \ No newline at end of file +2.19.1 \ No newline at end of file diff --git a/configure.ac b/configure.ac index e4608055..df50dc1c 100644 --- a/configure.ac +++ b/configure.ac @@ -306,21 +306,17 @@ if test $HPI_FOUND ; then AC_SUBST(HPI_FILE2,$LIB_PATH/librdhpi.a) AC_SUBST(HPI_FILE3,$LIB_PATH/librdhpi.la) AC_SUBST(HPI_FILE4,$LIB_PATH/librdhpi.so) - AC_SUBST(HPI_FILE5,$PREFIX/bin/rdhpiinfo) - if test $ar_gcc_distro = suse ; then - AC_SUBST(HPI_FILE6,"") - else - AC_SUBST(HPI_FILE6,$PREFIX/bin/rdhpiinfo-root) - fi + AC_SUBST(HPI_FILE5,"") + AC_SUBST(HPI_FILE6,"") AC_SUBST(HPI_FILE7,$PREFIX/share/rivendell/rdhpi_es.qm) AC_SUBST(HPI_FILE8,$PREFIX/share/rivendell/rdhpi_cs.qm) AC_SUBST(HPI_FILE9,$PREFIX/share/rivendell/rdhpi_de.qm) AC_SUBST(HPI_FILE10,$PREFIX/share/rivendell/rdhpi_nn.qm) AC_SUBST(HPI_FILE11,$PREFIX/share/rivendell/rdhpi_nb.qm) AC_SUBST(HPI_FILE12,$PREFIX/share/rivendell/rdhpi_pt_BR.qm) - AC_SUBST(HPI_FILE13,$PREFIX/share/applications/rivendell-rdhpiinfo-root.desktop) - AC_SUBST(HPI_FILE14,/etc/pam.d/rdhpiinfo-root) - AC_SUBST(HPI_FILE15,/etc/security/console.apps/rdhpiinfo-root) + AC_SUBST(HPI_FILE13,"") + AC_SUBST(HPI_FILE14,"") + AC_SUBST(HPI_FILE15,"") else AC_SUBST(LIBHPI,"") AC_SUBST(HPI_FILE1,"") @@ -521,7 +517,6 @@ AC_CONFIG_FILES([rivendell.spec \ utils/rdexport/Makefile \ utils/rdgen/Makefile \ utils/rdgpimon/Makefile \ - utils/rdhpiinfo/Makefile \ utils/rdimport/Makefile \ utils/rdmaint/Makefile \ utils/rdmarkerset/Makefile \ diff --git a/rdadmin/info_dialog.cpp b/rdadmin/info_dialog.cpp index 7765ea15..20307794 100644 --- a/rdadmin/info_dialog.cpp +++ b/rdadmin/info_dialog.cpp @@ -126,7 +126,7 @@ InfoDialog::InfoDialog(QWidget *parent) // // Signature // - str=QString(tr("Copyright 2002-2014")); + str=QString(tr("Copyright 2002-2018")); label=new QLabel(QString().sprintf("%s %s",(const char *)str, PACKAGE_BUGREPORT),this); label->setGeometry(10,87,sizeHint().width()-20,14); diff --git a/rdadmin/rdadmin_cs.ts b/rdadmin/rdadmin_cs.ts index 9e2390f7..935fb605 100644 --- a/rdadmin/rdadmin_cs.ts +++ b/rdadmin/rdadmin_cs.ts @@ -4421,7 +4421,11 @@ GNU Library General Public License. Klepněte na tlačítko pro zobrazení povol Copyright 2002-2014 - Autorské právo 2002-2014 + Autorské právo 2002-2014 + + + Copyright 2002-2018 + Autorské právo 2002-2018 diff --git a/rdadmin/rdadmin_de.ts b/rdadmin/rdadmin_de.ts index dd052611..80a730cf 100644 --- a/rdadmin/rdadmin_de.ts +++ b/rdadmin/rdadmin_de.ts @@ -4369,7 +4369,11 @@ anzeigen Copyright 2002-2014 - Copyright 2002-2014 + Copyright 2002-2014 + + + Copyright 2002-2018 + Copyright 2002-2018 diff --git a/rdadmin/rdadmin_es.ts b/rdadmin/rdadmin_es.ts index a94f4a59..9fc77a5f 100644 --- a/rdadmin/rdadmin_es.ts +++ b/rdadmin/rdadmin_es.ts @@ -4376,7 +4376,11 @@ PARA UN PROPÓSITO PARTICULAR. Oprima el botón "Ver licencia" para d Copyright 2002-2014 - Copyright 2002-2014 + Copyright 2002-2014 + + + Copyright 2002-2018 + Copyright 2002-2018 diff --git a/rdadmin/rdadmin_fr.ts b/rdadmin/rdadmin_fr.ts index 6c649c60..9ae5c63c 100644 --- a/rdadmin/rdadmin_fr.ts +++ b/rdadmin/rdadmin_fr.ts @@ -3901,7 +3901,7 @@ PARTICULAR PURPOSE. Touch the "View License" button for details. - Copyright 2002-2014 + Copyright 2002-2018 diff --git a/rdadmin/rdadmin_nb.ts b/rdadmin/rdadmin_nb.ts index ca06fd7f..8197d46a 100644 --- a/rdadmin/rdadmin_nb.ts +++ b/rdadmin/rdadmin_nb.ts @@ -4343,7 +4343,11 @@ Klikk på "Lisens"-knappen for fleire opplysningar. Copyright 2002-2014 - Copyright 2002-2014 + Copyright 2002-2014 + + + Copyright 2002-2018 + Copyright 2002-2018 diff --git a/rdadmin/rdadmin_nn.ts b/rdadmin/rdadmin_nn.ts index ca06fd7f..8197d46a 100644 --- a/rdadmin/rdadmin_nn.ts +++ b/rdadmin/rdadmin_nn.ts @@ -4343,7 +4343,11 @@ Klikk på "Lisens"-knappen for fleire opplysningar. Copyright 2002-2014 - Copyright 2002-2014 + Copyright 2002-2014 + + + Copyright 2002-2018 + Copyright 2002-2018 diff --git a/rdadmin/rdadmin_pt_BR.ts b/rdadmin/rdadmin_pt_BR.ts index 62266c04..cc546432 100644 --- a/rdadmin/rdadmin_pt_BR.ts +++ b/rdadmin/rdadmin_pt_BR.ts @@ -4362,7 +4362,11 @@ FINALIDADE PARTICULAR. Aperte o botão VER LICENÇA para mais detalhes. Copyright 2002-2014 - Copyright 2002-2009 {2002-2014?} + Copyright 2002-2009 {2002-2014?} + + + Copyright 2002-2018 + Copyright 2002-2009 {2002-2018?} diff --git a/rdcatch/edit_playout.cpp b/rdcatch/edit_playout.cpp index 2c12c375..e78c9df8 100644 --- a/rdcatch/edit_playout.cpp +++ b/rdcatch/edit_playout.cpp @@ -333,11 +333,6 @@ void EditPlayout::selectCutData() void EditPlayout::saveasData() { - if(!CheckEvent(true)) { - QMessageBox::warning(this,tr("Duplicate Event"), - tr("An event with these parameters already exists!")); - return; - } delete edit_recording; edit_recording=new RDRecording(-1,true); edit_added_events->push_back(edit_recording->id()); @@ -347,11 +342,6 @@ void EditPlayout::saveasData() void EditPlayout::okData() { - if(!CheckEvent(false)) { - QMessageBox::warning(this,tr("Duplicate Event"), - tr("An event with these parameters already exists!")); - return; - } Save(); done(0); } @@ -451,72 +441,3 @@ void EditPlayout::Save() edit_recording->setSun(edit_sun_button->isChecked()); edit_recording->setOneShot(edit_oneshot_box->isChecked()); } - - -bool EditPlayout::CheckEvent(bool include_myself) -{ - char station[65]; - char gunk[3]; - int chan; - QTime test_start_time; - QTime test_end_time; - - RDCut *cut=new RDCut(edit_cutname); - QTime start_time=edit_starttime_edit->time(); - QTime end_time=edit_starttime_edit->time().addMSecs(cut->length()); - delete cut; - - sscanf((const char *)edit_station_box->currentText(),"%s%s%d", - station,gunk,&chan); - QString sql= - QString().sprintf("select RECORDINGS.START_TIME,CUTS.LENGTH\ - from RECORDINGS left join CUTS\ - on(RECORDINGS.CUT_NAME=CUTS.CUT_NAME)\ - where (RECORDINGS.STATION_NAME=\"%s\")&&\ - (RECORDINGS.TYPE=%d)&&(RECORDINGS.CHANNEL=%d)", - station,RDRecording::Playout,chan+128); - if(edit_sun_button->isChecked()) { - sql+="&&(RECORDINGS.SUN=\"Y\")"; - } - if(edit_mon_button->isChecked()) { - sql+="&&(RECORDINGS.MON=\"Y\")"; - } - if(edit_tue_button->isChecked()) { - sql+="&&(RECORDINGS.TUE=\"Y\")"; - } - if(edit_wed_button->isChecked()) { - sql+="&&(RECORDINGS.WED=\"Y\")"; - } - if(edit_thu_button->isChecked()) { - sql+="&&(RECORDINGS.THU=\"Y\")"; - } - if(edit_fri_button->isChecked()) { - sql+="&&(RECORDINGS.FRI=\"Y\")"; - } - if(edit_sat_button->isChecked()) { - sql+="&&(RECORDINGS.SAT=\"Y\")"; - } - if(!include_myself) { - sql+=QString().sprintf("&&(RECORDINGS.ID!=%d)",edit_recording->id()); - } - RDSqlQuery *q=new RDSqlQuery(sql); - while(q->next()) { - test_start_time=q->value(0).toTime(); - test_end_time=q->value(0).toTime().addMSecs(q->value(1).toUInt()); - if(test_end_timetest_start_time)&&(start_time>test_end_time)&& - (end_time>test_start_time)&&(end_time>test_end_time))) { - } - else { - delete q; - return false; - } - } - delete q; - - return true; -} diff --git a/rdcatch/edit_playout.h b/rdcatch/edit_playout.h index 3614c866..b23be17a 100644 --- a/rdcatch/edit_playout.h +++ b/rdcatch/edit_playout.h @@ -59,7 +59,6 @@ class EditPlayout : public QDialog private: void PopulateDecks(QComboBox *box); void Save(); - bool CheckEvent(bool include_myself); RDDeck *edit_deck; RDRecording *edit_recording; QCheckBox *edit_active_button; diff --git a/rdcatch/rdcatch_cs.ts b/rdcatch/rdcatch_cs.ts index a35a4275..679252cc 100644 --- a/rdcatch/rdcatch_cs.ts +++ b/rdcatch/rdcatch_cs.ts @@ -432,11 +432,11 @@ nové Duplicate Event - Zdvojená událost + Zdvojená událost An event with these parameters already exists! - Událost s těmito parametry již existuje! + Událost s těmito parametry již existuje! diff --git a/rdcatch/rdcatch_de.ts b/rdcatch/rdcatch_de.ts index 9e2c6057..4de133fa 100644 --- a/rdcatch/rdcatch_de.ts +++ b/rdcatch/rdcatch_de.ts @@ -432,11 +432,11 @@ Neu Duplicate Event - Doppeltes Event + Doppeltes Event An event with these parameters already exists! - Ein Event mit diesen Parametern existiert bereits! + Ein Event mit diesen Parametern existiert bereits! diff --git a/rdcatch/rdcatch_es.ts b/rdcatch/rdcatch_es.ts index 94ebab92..aa4d9b2f 100644 --- a/rdcatch/rdcatch_es.ts +++ b/rdcatch/rdcatch_es.ts @@ -426,11 +426,11 @@ como Nuevo Duplicate Event - Evento duplicado + Evento duplicado An event with these parameters already exists! - ¡Un evento con esos parámetros ya existe! + ¡Un evento con esos parámetros ya existe! &Save As diff --git a/rdcatch/rdcatch_fr.ts b/rdcatch/rdcatch_fr.ts index 059c3d01..50d7f1ec 100644 --- a/rdcatch/rdcatch_fr.ts +++ b/rdcatch/rdcatch_fr.ts @@ -427,14 +427,6 @@ New &Cancel - - Duplicate Event - - - - An event with these parameters already exists! - - EditRecording diff --git a/rdcatch/rdcatch_nb.ts b/rdcatch/rdcatch_nb.ts index f1316bd0..0606cb5d 100644 --- a/rdcatch/rdcatch_nb.ts +++ b/rdcatch/rdcatch_nb.ts @@ -429,11 +429,11 @@ New Duplicate Event - Kopier hending + Kopier hending An event with these parameters already exists! - Det finst alt ei hending med dette oppsettet! + Det finst alt ei hending med dette oppsettet! diff --git a/rdcatch/rdcatch_nn.ts b/rdcatch/rdcatch_nn.ts index f1316bd0..0606cb5d 100644 --- a/rdcatch/rdcatch_nn.ts +++ b/rdcatch/rdcatch_nn.ts @@ -429,11 +429,11 @@ New Duplicate Event - Kopier hending + Kopier hending An event with these parameters already exists! - Det finst alt ei hending med dette oppsettet! + Det finst alt ei hending med dette oppsettet! diff --git a/rdcatch/rdcatch_pt_BR.ts b/rdcatch/rdcatch_pt_BR.ts index cdde3f2c..68f0231f 100644 --- a/rdcatch/rdcatch_pt_BR.ts +++ b/rdcatch/rdcatch_pt_BR.ts @@ -432,11 +432,11 @@ Novo Duplicate Event - Duplicar Evento + Duplicar Evento An event with these parameters already exists! - Um Evento com estes parâmetros já existe! + Um Evento com estes parâmetros já existe! diff --git a/rdhpi/rdhpiplaystream.cpp b/rdhpi/rdhpiplaystream.cpp index 7fd823c5..38cd71b8 100644 --- a/rdhpi/rdhpiplaystream.cpp +++ b/rdhpi/rdhpiplaystream.cpp @@ -2,7 +2,7 @@ // // A class for playing Microsoft WAV files. // -// (C) Copyright 2002-2007,2016 Fred Gleason +// (C) Copyright 2002-2007,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 @@ -66,7 +66,10 @@ RDHPIPlayStream::RDHPIPlayStream(RDHPISoundCard *card,QWidget *parent) // hpi_err_t hpi_err; int quan; uint16_t type[HPI_MAX_ADAPTERS]; + struct hpi_format fmt; + uint32_t dma_size=0; + dma_buffer_size=0; sound_card=card; card_number=-1; stream_number=-1; @@ -94,16 +97,28 @@ RDHPIPlayStream::RDHPIPlayStream(RDHPISoundCard *card,QWidget *parent) card_index[i]=i; } #else - LogHpi(HPI_SubSysGetNumAdapters(NULL,&quan)); + LogHpi(HPI_SubSysGetNumAdapters(NULL,&quan),__LINE__); for(int i=0;igetCardOutputStreams(card_number);i++) { - if(HPI_OutStreamOpen(NULL,card_index[card_number],i,&hostream)==0) { + if(LogHpi(HPI_OutStreamOpen(NULL,card_index[card_number],i,&hostream), + __LINE__)==0) { + syslog(LOG_NOTICE,"buffer_size: %u\n",dma_buffer_size); found=true; break; } @@ -179,52 +196,58 @@ bool RDHPIPlayStream::formatSupported(RDWaveFile::Format format) if(!found) { return false; } + if(LogHpi(HPI_OutStreamHostBufferAllocate(NULL,hostream,dma_buffer_size), + __LINE__)!=0) { + LogHpi(HPI_OutStreamClose(NULL,hostream),__LINE__); + return false; + } } else { hostream=hpi_stream; } switch(format) { - case RDWaveFile::Pcm16: - LogHpi(HPI_FormatCreate(&hpi_format,getChannels(), - HPI_FORMAT_PCM16_SIGNED, - getSamplesPerSec(),getHeadBitRate(),0)); - state=HPI_OutStreamQueryFormat(NULL,hostream,&hpi_format); - break; + case RDWaveFile::Pcm16: + LogHpi(HPI_FormatCreate(&hpi_format,getChannels(), + HPI_FORMAT_PCM16_SIGNED, + getSamplesPerSec(),getHeadBitRate(),0),__LINE__); + state=LogHpi(HPI_OutStreamQueryFormat(NULL,hostream,&hpi_format),__LINE__); + break; - case RDWaveFile::Pcm24: - LogHpi(HPI_FormatCreate(&hpi_format,getChannels(), - HPI_FORMAT_PCM24_SIGNED, - getSamplesPerSec(),getHeadBitRate(),0)); - state=HPI_OutStreamQueryFormat(NULL,hostream,&hpi_format); - break; + case RDWaveFile::Pcm24: + LogHpi(HPI_FormatCreate(&hpi_format,getChannels(), + HPI_FORMAT_PCM24_SIGNED, + getSamplesPerSec(),getHeadBitRate(),0),__LINE__); + state=LogHpi(HPI_OutStreamQueryFormat(NULL,hostream,&hpi_format),__LINE__); + break; - case RDWaveFile::MpegL1: - LogHpi(HPI_FormatCreate(&hpi_format,getChannels(), - HPI_FORMAT_MPEG_L1, - getSamplesPerSec(),getHeadBitRate(),0)); - state=HPI_OutStreamQueryFormat(NULL,hostream,&hpi_format); - break; + case RDWaveFile::MpegL1: + LogHpi(HPI_FormatCreate(&hpi_format,getChannels(), + HPI_FORMAT_MPEG_L1, + getSamplesPerSec(),getHeadBitRate(),0),__LINE__); + state=LogHpi(HPI_OutStreamQueryFormat(NULL,hostream,&hpi_format),__LINE__); + break; - case RDWaveFile::MpegL2: - LogHpi(HPI_FormatCreate(&hpi_format,getChannels(), - HPI_FORMAT_MPEG_L2, - getSamplesPerSec(),getHeadBitRate(),0)); - state=HPI_OutStreamQueryFormat(NULL,hostream,&hpi_format); - break;; + case RDWaveFile::MpegL2: + LogHpi(HPI_FormatCreate(&hpi_format,getChannels(), + HPI_FORMAT_MPEG_L2, + getSamplesPerSec(),getHeadBitRate(),0),__LINE__); + state=LogHpi(HPI_OutStreamQueryFormat(NULL,hostream,&hpi_format),__LINE__); + break; - case RDWaveFile::MpegL3: - LogHpi(HPI_FormatCreate(&hpi_format,getChannels(), - HPI_FORMAT_MPEG_L3, - getSamplesPerSec(),getHeadBitRate(),0)); - state=HPI_OutStreamQueryFormat(NULL,hostream,&hpi_format); - break; + case RDWaveFile::MpegL3: + LogHpi(HPI_FormatCreate(&hpi_format,getChannels(), + HPI_FORMAT_MPEG_L3, + getSamplesPerSec(),getHeadBitRate(),0),__LINE__); + state=LogHpi(HPI_OutStreamQueryFormat(NULL,hostream,&hpi_format),__LINE__); + break; - default: - state=1; - break; + default: + state=1; + break; } if(!is_open) { - LogHpi(HPI_OutStreamClose(NULL,hostream)); + LogHpi(HPI_OutStreamHostBufferFree(NULL,hostream),__LINE__); + LogHpi(HPI_OutStreamClose(NULL,hostream),__LINE__); } if(state!=0) { return false; @@ -236,46 +259,46 @@ bool RDHPIPlayStream::formatSupported(RDWaveFile::Format format) bool RDHPIPlayStream::formatSupported() { switch(getFormatTag()) { - case WAVE_FORMAT_PCM: - switch(getBitsPerSample()) { - case 8: - return formatSupported(RDWaveFile::Pcm8); - break; + case WAVE_FORMAT_PCM: + switch(getBitsPerSample()) { + case 8: + return formatSupported(RDWaveFile::Pcm8); + break; - case 16: - return formatSupported(RDWaveFile::Pcm16); - break; + case 16: + return formatSupported(RDWaveFile::Pcm16); + break; - case 24: - return formatSupported(RDWaveFile::Pcm24); - break; + case 24: + return formatSupported(RDWaveFile::Pcm24); + break; - default: - return false; - } - break; + default: + return false; + } + break; - case WAVE_FORMAT_MPEG: - switch(getHeadLayer()) { - case 1: - return formatSupported(RDWaveFile::MpegL1); - break; + case WAVE_FORMAT_MPEG: + switch(getHeadLayer()) { + case 1: + return formatSupported(RDWaveFile::MpegL1); + break; - case 2: - return formatSupported(RDWaveFile::MpegL2); - break; + case 2: + return formatSupported(RDWaveFile::MpegL2); + break; - case 3: - return formatSupported(RDWaveFile::MpegL3); - break; + case 3: + return formatSupported(RDWaveFile::MpegL3); + break; - default: - return false; - } - break; + default: + return false; + } + break; - default: - return false; + default: + return false; } } @@ -396,10 +419,10 @@ bool RDHPIPlayStream::play() if((!playing)&&(!is_paused)) { LogHpi(HPI_OutStreamSetTimeScale(NULL,hpi_stream, (uint16_t)((RD_TIMESCALE_DIVISOR/(double)play_speed)* - HPI_OSTREAM_TIMESCALE_UNITS))); - if(HPI_OutStreamGetInfoEx(NULL,hpi_stream, - &state,&buffer_size,&data_to_play, - &samples_played,&reserved)!=0) { + HPI_OSTREAM_TIMESCALE_UNITS)),__LINE__); + if(LogHpi(HPI_OutStreamGetInfoEx(NULL,hpi_stream, + &state,&buffer_size,&data_to_play, + &samples_played,&reserved),__LINE__)!=0) { return false; } fragment_size=buffer_size/4; @@ -414,62 +437,66 @@ bool RDHPIPlayStream::play() return false; } switch(getFormatTag()) { - case WAVE_FORMAT_PCM: - case WAVE_FORMAT_VORBIS: - switch(getBitsPerSample()) { - case 8: - LogHpi(HPI_FormatCreate(&format,getChannels(), - HPI_FORMAT_PCM8_UNSIGNED, - getSamplesPerSec(),0,0)); - break; - case 16: - LogHpi(HPI_FormatCreate(&format,getChannels(), - HPI_FORMAT_PCM16_SIGNED, - getSamplesPerSec(),0,0)); - break; - case 24: - LogHpi(HPI_FormatCreate(&format,getChannels(), - HPI_FORMAT_PCM24_SIGNED, - getSamplesPerSec(),0,0)); - break; - case 32: - LogHpi(HPI_FormatCreate(&format,getChannels(), - HPI_FORMAT_PCM32_SIGNED, - getSamplesPerSec(),0,0)); - break; - default: - LogHpi(HPI_AdapterClose(NULL,card_index[card_number])); - return false; - break; - } - break; - case WAVE_FORMAT_MPEG: - switch(getHeadLayer()) { - case 1: - LogHpi(HPI_FormatCreate(&format,getChannels(), - HPI_FORMAT_MPEG_L1,getSamplesPerSec(), - getHeadBitRate(),getHeadFlags())); - break; - case 2: - LogHpi(HPI_FormatCreate(&format,getChannels(), - HPI_FORMAT_MPEG_L2,getSamplesPerSec(), - getHeadBitRate(),getHeadFlags())); - break; - case 3: - LogHpi(HPI_FormatCreate(&format,getChannels(), - HPI_FORMAT_MPEG_L3,getSamplesPerSec(), - getHeadBitRate(),getHeadFlags())); - break; - default: - LogHpi(HPI_AdapterClose(NULL,card_index[card_number])); - return false; - } - break; - default: - return false; + case WAVE_FORMAT_PCM: + case WAVE_FORMAT_VORBIS: + switch(getBitsPerSample()) { + case 8: + LogHpi(HPI_FormatCreate(&format,getChannels(),HPI_FORMAT_PCM8_UNSIGNED, + getSamplesPerSec(),0,0),__LINE__); + break; + + case 16: + LogHpi(HPI_FormatCreate(&format,getChannels(),HPI_FORMAT_PCM16_SIGNED, + getSamplesPerSec(),0,0),__LINE__); + break; + + case 24: + LogHpi(HPI_FormatCreate(&format,getChannels(),HPI_FORMAT_PCM24_SIGNED, + getSamplesPerSec(),0,0),__LINE__); + break; + + case 32: + LogHpi(HPI_FormatCreate(&format,getChannels(),HPI_FORMAT_PCM32_SIGNED, + getSamplesPerSec(),0,0),__LINE__); + break; + + default: + LogHpi(HPI_AdapterClose(NULL,card_index[card_number]),__LINE__); + return false; + } + break; + case WAVE_FORMAT_MPEG: + switch(getHeadLayer()) { + case 1: + LogHpi(HPI_FormatCreate(&format,getChannels(),HPI_FORMAT_MPEG_L1, + getSamplesPerSec(),getHeadBitRate(), + getHeadFlags()),__LINE__); + break; + + case 2: + LogHpi(HPI_FormatCreate(&format,getChannels(),HPI_FORMAT_MPEG_L2, + getSamplesPerSec(),getHeadBitRate(), + getHeadFlags()),__LINE__); + break; + + case 3: + LogHpi(HPI_FormatCreate(&format,getChannels(), + HPI_FORMAT_MPEG_L3,getSamplesPerSec(), + getHeadBitRate(),getHeadFlags()),__LINE__); + break; + + default: + LogHpi(HPI_AdapterClose(NULL,card_index[card_number]),__LINE__); + return false; + } + break; + + default: + return false; } #if HPI_VER < 0x00030500 - if(HPI_DataCreate(&hpi_data,&format,pdata,fragment_size)!=0) { + if(LogHpi(HPI_DataCreate(&hpi_data,&format,pdata,fragment_size),__LINE__)!= + 0) { return false; } #endif @@ -488,15 +515,15 @@ bool RDHPIPlayStream::play() } readWave(pdata,read_bytes); #if HPI_VER > 0x00030500 - LogHpi(HPI_OutStreamWriteBuf(NULL,hpi_stream,pdata,read_bytes,&format)); + LogHpi(HPI_OutStreamWriteBuf(NULL,hpi_stream,pdata,read_bytes,&format), + __LINE__); #else - LogHpi(HPI_DataCreate(&hpi_data,&format,pdata,read_bytes)); - LogHpi(HPI_OutStreamWrite(NULL,hpi_stream,&hpi_data)); + LogHpi(HPI_DataCreate(&hpi_data,&format,pdata,read_bytes),__LINE__); + LogHpi(HPI_OutStreamWrite(NULL,hpi_stream,&hpi_data),__LINE__); #endif - if(HPI_OutStreamStart(NULL,hpi_stream)!=0) { + if(LogHpi(HPI_OutStreamStart(NULL,hpi_stream),__LINE__)!=0) { return false; } - clock->start(50); clock->start(FRAGMENT_TIME); playing=true; is_paused=false; @@ -513,7 +540,7 @@ bool RDHPIPlayStream::play() } } if((!playing)&(is_paused|repositioned)) { - LogHpi(HPI_OutStreamStart(NULL,hpi_stream)); + LogHpi(HPI_OutStreamStart(NULL,hpi_stream),__LINE__); clock->start(FRAGMENT_TIME); playing=true; stopping=false; @@ -543,19 +570,20 @@ void RDHPIPlayStream::pause() return; } if(playing) { - LogHpi(HPI_OutStreamStop(NULL,hpi_stream)); + LogHpi(HPI_OutStreamStop(NULL,hpi_stream),__LINE__); clock->stop(); LogHpi(HPI_OutStreamGetInfoEx(NULL,hpi_stream,&state,&buffer_size, - &data_to_play,&samples_played,&reserved)); + &data_to_play,&samples_played,&reserved), + __LINE__); switch(getFormatTag()) { - case WAVE_FORMAT_PCM: - samples_pending=data_to_play/(getChannels()*getBitsPerSample()/8); - break; + case WAVE_FORMAT_PCM: + samples_pending=data_to_play/(getChannels()*getBitsPerSample()/8); + break; - case WAVE_FORMAT_MPEG: - samples_pending= - 1152*data_to_play/(144*getHeadBitRate()/getSamplesPerSec()); - break; + case WAVE_FORMAT_MPEG: + samples_pending= + 1152*data_to_play/(144*getHeadBitRate()/getSamplesPerSec()); + break; } playing=false; is_paused=true; @@ -580,12 +608,12 @@ void RDHPIPlayStream::stop() return; } if(playing|is_paused) { - LogHpi(HPI_OutStreamStop(NULL,hpi_stream)); + LogHpi(HPI_OutStreamStop(NULL,hpi_stream),__LINE__); clock->stop(); playing=false; is_paused=false; seekWave(0,SEEK_SET); - LogHpi(HPI_OutStreamReset(NULL,hpi_stream)); + LogHpi(HPI_OutStreamReset(NULL,hpi_stream),__LINE__); samples_pending=0; samples_skipped=0; stream_state=RDHPIPlayStream::Stopped; @@ -632,26 +660,27 @@ bool RDHPIPlayStream::setPosition(unsigned samples) is_paused=false; repositioned=true; } - LogHpi(HPI_OutStreamReset(NULL,hpi_stream)); + LogHpi(HPI_OutStreamReset(NULL,hpi_stream),__LINE__); samples_played=0; switch(getFormatTag()) { - case WAVE_FORMAT_PCM: - case WAVE_FORMAT_VORBIS: - samples_skipped= - (unsigned)((double)getBlockAlign()* - ((double)samples/(double)getBlockAlign())); - seekWave((int)((double)samples_skipped*(double)getBlockAlign()), - SEEK_SET); - break; - case WAVE_FORMAT_MPEG: - samples_skipped= - (unsigned)((double)getBlockAlign()* - ((double)samples/(double)getBlockAlign())); - seekWave((int)((double)(getAvgBytesPerSec())* - ((double)(samples_skipped)/ - ((double)getSamplesPerSec()))), - SEEK_SET); - break; + case WAVE_FORMAT_PCM: + case WAVE_FORMAT_VORBIS: + samples_skipped= + (unsigned)((double)getBlockAlign()* + ((double)samples/(double)getBlockAlign())); + seekWave((int)((double)samples_skipped*(double)getBlockAlign()), + SEEK_SET); + break; + + case WAVE_FORMAT_MPEG: + samples_skipped= + (unsigned)((double)getBlockAlign()* + ((double)samples/(double)getBlockAlign())); + seekWave((int)((double)(getAvgBytesPerSec())* + ((double)(samples_skipped)/ + ((double)getSamplesPerSec()))), + SEEK_SET); + break; } emit position(samples); } @@ -686,24 +715,25 @@ void RDHPIPlayStream::tickClock() char hpi_text[100]; int n; - hpi_err=HPI_OutStreamGetInfoEx(NULL,hpi_stream, - &state,&buffer_size,&data_to_play, - &samples_played,&reserved); + hpi_err=LogHpi(HPI_OutStreamGetInfoEx(NULL,hpi_stream, + &state,&buffer_size,&data_to_play, + &samples_played,&reserved),__LINE__); if(!stopping) { while((buffer_size-data_to_play)>=fragment_size) { n=readWave(pdata,fragment_size); if((n<=0)||(((uint32_t)n) 0x00030500 - if((hpi_err=HPI_OutStreamWriteBuf(NULL,hpi_stream, - pdata,n,&format))!=0) { + if((hpi_err=LogHpi(HPI_OutStreamWriteBuf(NULL,hpi_stream, + pdata,n,&format),__LINE__))!= + 0) { HPI_GetErrorText(hpi_err,hpi_text); fprintf(stderr,"*** HPI Error: %s ***\n",hpi_text); } #else HPI_DataCreate(&hpi_data,&format,pdata,n); - if((hpi_err=HPI_OutStreamWrite(NULL,hpi_stream, - &hpi_data))!=0) { + if((hpi_err=LogHpi(HPI_OutStreamWrite(NULL,hpi_stream, + &hpi_data),__LINE__))!=0) { HPI_GetErrorText(hpi_err,hpi_text); fprintf(stderr,"*** HPI Error: %s ***\n",hpi_text); } @@ -714,26 +744,28 @@ void RDHPIPlayStream::tickClock() } left_to_write-=n; #if HPI_VER > 0x00030500 - hpi_err=HPI_OutStreamWriteBuf(NULL,hpi_stream, - pdata,n,&format); + hpi_err=LogHpi(HPI_OutStreamWriteBuf(NULL,hpi_stream,pdata,n,&format), + __LINE__); #else - hpi_err=HPI_DataCreate(&hpi_data,&format,pdata,n); - hpi_err=HPI_OutStreamWrite(NULL,hpi_stream,&hpi_data); + hpi_err=LogHpi(HPI_DataCreate(&hpi_data,&format,pdata,n),__LINE__); + hpi_err=LogHpi(HPI_OutStreamWrite(NULL,hpi_stream,&hpi_data),__LINE__); #endif - hpi_err=HPI_OutStreamGetInfoEx(NULL,hpi_stream, - &state,&buffer_size,&data_to_play, - &samples_played,&reserved); + hpi_err=LogHpi(HPI_OutStreamGetInfoEx(NULL,hpi_stream, + &state,&buffer_size,&data_to_play, + &samples_played,&reserved), + __LINE__); } } else { if(state==HPI_STATE_DRAINED) { - hpi_err=HPI_OutStreamStop(NULL,hpi_stream); - hpi_err=HPI_OutStreamClose(NULL,hpi_stream); - hpi_err=HPI_AdapterClose(NULL,card_index[card_number]); + LogHpi(HPI_OutStreamStop(NULL,hpi_stream),__LINE__); + LogHpi(HPI_OutStreamHostBufferFree(NULL,hpi_stream),__LINE__); + LogHpi(HPI_OutStreamClose(NULL,hpi_stream),__LINE__); + hpi_err=LogHpi(HPI_AdapterClose(NULL,card_index[card_number]),__LINE__); clock->stop(); playing=false; seekWave(0,SEEK_SET); - hpi_err=HPI_OutStreamReset(NULL,hpi_stream); + hpi_err=LogHpi(HPI_OutStreamReset(NULL,hpi_stream),__LINE__); samples_pending=0; samples_skipped=0; stream_state=RDHPIPlayStream::Stopped; @@ -761,7 +793,10 @@ int RDHPIPlayStream::GetStream() #ifdef RDHPIPLAYSTREAM_USE_LOCAL_MUTEX for(int i=0;igetCardOutputStreams(card_number);i++) { if(++stream_mutex[card_number][i]==1) { - LogHpi(HPI_OutStreamOpen(NULL,card_index[card_number],i,&hpi_stream)); + LogHpi(HPI_OutStreamOpen(NULL,card_index[card_number],i,&hpi_stream), + __LINE__); + LogHpi(HPI_OutStreamHostBufferAllocate(NULL,hpi_stream,dma_buffer_size), + __LINE__); stream_number=i; return stream_number; } @@ -772,7 +807,8 @@ int RDHPIPlayStream::GetStream() return -1; #else for(int i=0;igetCardOutputStreams(card_number);i++) { - if(HPI_OutStreamOpen(NULL,card_index[card_number],i,&hpi_stream)==0) { + if(LogHpi(HPI_OutStreamOpen(NULL,card_index[card_number],i,&hpi_stream), + __LINE__)==0) { stream_number=i; // syslog(LOG_ERR,"HPI allocating ostream: %d",stream_number); return stream_number; @@ -787,23 +823,25 @@ void RDHPIPlayStream::FreeStream() { #ifdef RDHPIPLAYSTREAM_USE_LOCAL_MUTEX stream_mutex[card_number][stream_number]--; - LogHpi(HPI_OutStreamClose(NULL,hpi_stream)); + LogHpi(HPI_OutStreamHostBufferFree(NULL,hpi_stream),__LINE__); + LogHpi(HPI_OutStreamClose(NULL,hpi_stream),__LINE__); stream_number=-1; #else - LogHpi(HPI_OutStreamClose(NULL,hpi_stream)); + LogHpi(HPI_OutStreamHostBufferFree(NULL,hpi_stream),__LINE__); + LogHpi(HPI_OutStreamClose(NULL,hpi_stream),__LINE__); // syslog(LOG_ERR,"HPI closing ostream: %d",stream_number); stream_number=-1; #endif } -hpi_err_t RDHPIPlayStream::LogHpi(hpi_err_t err) +hpi_err_t RDHPIPlayStream::LogHpi(hpi_err_t err,int lineno) { char err_txt[200]; if(err!=0) { HPI_GetErrorText(err,err_txt); - syslog(LOG_NOTICE,"HPI Error: %s",err_txt); + syslog(LOG_NOTICE,"HPI Error: %s, %s line %d",err_txt,__FILE__,lineno); } return err; } diff --git a/rdhpi/rdhpiplaystream.h b/rdhpi/rdhpiplaystream.h index 8562946c..39bdb2cd 100644 --- a/rdhpi/rdhpiplaystream.h +++ b/rdhpi/rdhpiplaystream.h @@ -87,7 +87,7 @@ class RDHPIPlayStream : public QObject,public RDWaveFile void Drained(); int GetStream(); void FreeStream(); - hpi_err_t LogHpi(hpi_err_t err); + hpi_err_t LogHpi(hpi_err_t err,int lineno); RDHPISoundCard *sound_card; RDHPIPlayStream::State stream_state; QString wave_name; @@ -130,6 +130,7 @@ class RDHPIPlayStream : public QObject,public RDWaveFile bool restart_transport; int samples_pending; unsigned current_position; + uint32_t dma_buffer_size; }; diff --git a/rdhpi/rdhpirecordstream.cpp b/rdhpi/rdhpirecordstream.cpp index d906f774..2b821775 100644 --- a/rdhpi/rdhpirecordstream.cpp +++ b/rdhpi/rdhpirecordstream.cpp @@ -2,7 +2,7 @@ // // A class for recording Microsoft WAV files. // -// (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 @@ -37,6 +37,8 @@ RDHPIRecordStream::RDHPIRecordStream(RDHPISoundCard *card,QWidget *parent) { int quan; uint16_t type[HPI_MAX_ADAPTERS]; + struct hpi_format fmt; + uint32_t dma_size=0; if(getenv(DEBUG_VAR)==NULL) { debug=false; @@ -74,16 +76,28 @@ RDHPIRecordStream::RDHPIRecordStream(RDHPISoundCard *card,QWidget *parent) card_index[i]=i; } #else - LogHpi(HPI_SubSysGetNumAdapters(NULL,&quan)); + LogHpi(HPI_SubSysGetNumAdapters(NULL,&quan),__LINE__); for(int i=0;igetCardInputStreams(card_number);i++) { - if(HPI_InStreamOpen(NULL,card_index[card_number],i,&histream)==0) { + if(LogHpi(HPI_InStreamOpen(NULL,card_index[card_number],i,&histream), + __LINE__)==0) { found=true; break; } @@ -195,56 +210,60 @@ bool RDHPIRecordStream::formatSupported(RDWaveFile::Format format) if(!found) { return false; } + if(LogHpi(HPI_InStreamHostBufferAllocate(NULL,histream,dma_buffer_size), + __LINE__)!=0) { + LogHpi(HPI_InStreamHostBufferFree(NULL,histream),__LINE__); + LogHpi(HPI_InStreamClose(NULL,histream),__LINE__); + return false; + } } else { histream=hpi_stream; } switch(format) { - case RDWaveFile::Pcm8: - LogHpi(HPI_FormatCreate(&hformat,getChannels(), - HPI_FORMAT_PCM8_UNSIGNED, - getSamplesPerSec(),getHeadBitRate(),0)); - state=HPI_InStreamQueryFormat(NULL,histream,&hformat); - break; + case RDWaveFile::Pcm8: + LogHpi(HPI_FormatCreate(&hformat,getChannels(),HPI_FORMAT_PCM8_UNSIGNED, + getSamplesPerSec(),getHeadBitRate(),0),__LINE__); + state=LogHpi(HPI_InStreamQueryFormat(NULL,histream,&hformat),__LINE__); + break; - case RDWaveFile::Pcm16: - LogHpi(HPI_FormatCreate(&hformat,getChannels(), - HPI_FORMAT_PCM16_SIGNED, - getSamplesPerSec(),getHeadBitRate(),0)); - state=HPI_InStreamQueryFormat(NULL,histream,&hformat); - break; + case RDWaveFile::Pcm16: + LogHpi(HPI_FormatCreate(&hformat,getChannels(),HPI_FORMAT_PCM16_SIGNED, + getSamplesPerSec(),getHeadBitRate(),0),__LINE__); + state=LogHpi(HPI_InStreamQueryFormat(NULL,histream,&hformat),__LINE__); + break; - case RDWaveFile::Pcm24: - LogHpi(HPI_FormatCreate(&hformat,getChannels(), - HPI_FORMAT_PCM24_SIGNED, - getSamplesPerSec(),getHeadBitRate(),0)); - state=HPI_InStreamQueryFormat(NULL,histream,&hformat); - break; + case RDWaveFile::Pcm24: + LogHpi(HPI_FormatCreate(&hformat,getChannels(),HPI_FORMAT_PCM24_SIGNED, + getSamplesPerSec(),getHeadBitRate(),0),__LINE__); + state=LogHpi(HPI_InStreamQueryFormat(NULL,histream,&hformat),__LINE__); + break; - case RDWaveFile::MpegL1: - LogHpi(HPI_FormatCreate(&hformat,getChannels(),HPI_FORMAT_MPEG_L1, - getSamplesPerSec(),getHeadBitRate(),0)); - state=HPI_InStreamQueryFormat(NULL,histream,&hformat); - break; + case RDWaveFile::MpegL1: + LogHpi(HPI_FormatCreate(&hformat,getChannels(),HPI_FORMAT_MPEG_L1, + getSamplesPerSec(),getHeadBitRate(),0),__LINE__); + state=LogHpi(HPI_InStreamQueryFormat(NULL,histream,&hformat),__LINE__); + break; - case RDWaveFile::MpegL2: - LogHpi(HPI_FormatCreate(&hformat,getChannels(),HPI_FORMAT_MPEG_L2, - getSamplesPerSec(),getHeadBitRate(),0)); - state=HPI_InStreamQueryFormat(NULL,histream,&hformat); - break; + case RDWaveFile::MpegL2: + LogHpi(HPI_FormatCreate(&hformat,getChannels(),HPI_FORMAT_MPEG_L2, + getSamplesPerSec(),getHeadBitRate(),0),__LINE__); + state=LogHpi(HPI_InStreamQueryFormat(NULL,histream,&hformat),__LINE__); + break; - case RDWaveFile::MpegL3: - LogHpi(HPI_FormatCreate(&hformat,getChannels(),HPI_FORMAT_MPEG_L3, - getSamplesPerSec(),getHeadBitRate(),0)); - state=HPI_InStreamQueryFormat(NULL,histream,&hformat); - break; + case RDWaveFile::MpegL3: + LogHpi(HPI_FormatCreate(&hformat,getChannels(),HPI_FORMAT_MPEG_L3, + getSamplesPerSec(),getHeadBitRate(),0),__LINE__); + state=LogHpi(HPI_InStreamQueryFormat(NULL,histream,&hformat),__LINE__); + break; - default: - state=1; - break; + default: + state=1; + break; } if(!is_open) { - LogHpi(HPI_InStreamClose(NULL,histream)); + LogHpi(HPI_InStreamHostBufferFree(NULL,histream),__LINE__); + LogHpi(HPI_InStreamClose(NULL,histream),__LINE__); } if(state!=0) { return false; @@ -256,46 +275,46 @@ bool RDHPIRecordStream::formatSupported(RDWaveFile::Format format) bool RDHPIRecordStream::formatSupported() { switch(getFormatTag()) { - case WAVE_FORMAT_PCM: - switch(getBitsPerSample()) { - case 8: - return formatSupported(RDWaveFile::Pcm8); - break; + case WAVE_FORMAT_PCM: + switch(getBitsPerSample()) { + case 8: + return formatSupported(RDWaveFile::Pcm8); + break; - case 16: - return formatSupported(RDWaveFile::Pcm16); - break; + case 16: + return formatSupported(RDWaveFile::Pcm16); + break; - case 24: - return formatSupported(RDWaveFile::Pcm24); - break; + case 24: + return formatSupported(RDWaveFile::Pcm24); + break; - default: - return false; - } - break; + default: + return false; + } + break; - case WAVE_FORMAT_MPEG: - switch(getHeadLayer()) { - case 1: - return formatSupported(RDWaveFile::MpegL1); - break; + case WAVE_FORMAT_MPEG: + switch(getHeadLayer()) { + case 1: + return formatSupported(RDWaveFile::MpegL1); + break; - case 2: - return formatSupported(RDWaveFile::MpegL2); - break; + case 2: + return formatSupported(RDWaveFile::MpegL2); + break; - case 3: - return formatSupported(RDWaveFile::MpegL3); - break; + case 3: + return formatSupported(RDWaveFile::MpegL3); + break; - default: - return false; - } - break; + default: + return false; + } + break; - default: - return false; + default: + return false; } } @@ -381,9 +400,9 @@ bool RDHPIRecordStream::recordReady() } if((!is_recording)&&(!is_paused)) { resetWave(); - if(HPI_InStreamGetInfoEx(NULL,hpi_stream, - &state,&buffer_size,&data_recorded, - &samples_recorded,&reserved)!=0) { + if(LogHpi(HPI_InStreamGetInfoEx(NULL,hpi_stream, + &state,&buffer_size,&data_recorded, + &samples_recorded,&reserved),__LINE__)!=0) { if(debug) { printf("RDHPIRecordStream: HPI_InStreamGetInfoEx() failed\n"); } @@ -412,27 +431,27 @@ bool RDHPIRecordStream::recordReady() } switch(getBitsPerSample()) { case 8: - hpi_error=HPI_FormatCreate(&format,getChannels(), - HPI_FORMAT_PCM8_UNSIGNED,getSamplesPerSec(), - 0,0); + hpi_error=LogHpi(HPI_FormatCreate(&format,getChannels(), + HPI_FORMAT_PCM8_UNSIGNED, + getSamplesPerSec(),0,0),__LINE__); break; case 16: - hpi_error=HPI_FormatCreate(&format,getChannels(), - HPI_FORMAT_PCM16_SIGNED,getSamplesPerSec(), - 0,0); + hpi_error=LogHpi(HPI_FormatCreate(&format,getChannels(), + HPI_FORMAT_PCM16_SIGNED, + getSamplesPerSec(),0,0),__LINE__); break; case 24: - hpi_error=HPI_FormatCreate(&format,getChannels(), - HPI_FORMAT_PCM24_SIGNED,getSamplesPerSec(), - 0,0); + hpi_error=LogHpi(HPI_FormatCreate(&format,getChannels(), + HPI_FORMAT_PCM24_SIGNED, + getSamplesPerSec(),0,0),__LINE__); break; case 32: - hpi_error=HPI_FormatCreate(&format,getChannels(), - HPI_FORMAT_PCM32_SIGNED,getSamplesPerSec(), - 0,0); + hpi_error=LogHpi(HPI_FormatCreate(&format,getChannels(), + HPI_FORMAT_PCM32_SIGNED, + getSamplesPerSec(),0,0),__LINE__); break; default: @@ -449,25 +468,29 @@ bool RDHPIRecordStream::recordReady() } switch(getHeadLayer()) { case 1: - hpi_error=HPI_FormatCreate(&format,getChannels(), - HPI_FORMAT_MPEG_L1,getSamplesPerSec(), - getHeadBitRate(),getHeadFlags()); + hpi_error=LogHpi(HPI_FormatCreate(&format,getChannels(), + HPI_FORMAT_MPEG_L1,getSamplesPerSec(), + getHeadBitRate(),getHeadFlags()), + __LINE__); break; case 2: - hpi_error=HPI_FormatCreate(&format,getChannels(), - HPI_FORMAT_MPEG_L2,getSamplesPerSec(), - getHeadBitRate(),getHeadFlags()); + hpi_error=LogHpi(HPI_FormatCreate(&format,getChannels(), + HPI_FORMAT_MPEG_L2,getSamplesPerSec(), + getHeadBitRate(),getHeadFlags()), + __LINE__); break; case 3: - hpi_error=HPI_FormatCreate(&format,getChannels(), - HPI_FORMAT_MPEG_L3,getSamplesPerSec(), - getHeadBitRate(),getHeadFlags()); + hpi_error=LogHpi(HPI_FormatCreate(&format,getChannels(), + HPI_FORMAT_MPEG_L3,getSamplesPerSec(), + getHeadBitRate(),getHeadFlags()), + __LINE__); break; default: - hpi_error=HPI_AdapterClose(NULL,card_index[card_number]); + hpi_error=LogHpi(HPI_AdapterClose(NULL,card_index[card_number]), + __LINE__); if(debug) { printf("RDHPIRecordStream: invalid MPEG-1 layer\n"); } @@ -495,9 +518,9 @@ bool RDHPIRecordStream::recordReady() if(debug) { printf("RDHPIRecordStream: using OggVorbis\n"); } - hpi_error=HPI_FormatCreate(&format,getChannels(), - HPI_FORMAT_PCM16_SIGNED,getSamplesPerSec(), - 0,0); + hpi_error=LogHpi(HPI_FormatCreate(&format,getChannels(), + HPI_FORMAT_PCM16_SIGNED, + getSamplesPerSec(),0,0),__LINE__); break; default: @@ -507,8 +530,8 @@ bool RDHPIRecordStream::recordReady() return false; break; } - if((hpi_error=HPI_InStreamQueryFormat(NULL,hpi_stream, - &format))!=0) { + if((hpi_error=LogHpi(HPI_InStreamQueryFormat(NULL,hpi_stream, + &format),__LINE__))!=0) { if(debug) { HPI_GetErrorText(hpi_error,hpi_text); printf("Num: %d\n",hpi_error); @@ -518,12 +541,12 @@ bool RDHPIRecordStream::recordReady() } } #if HPI_VER < 0x00030500 - HPI_DataCreate(&hpi_data,&format,pdata,fragment_size); + LogHpi(HPI_DataCreate(&hpi_data,&format,pdata,fragment_size),__LINE__); #endif - hpi_error=HPI_InStreamSetFormat(NULL,hpi_stream,&format); - hpi_error=HPI_InStreamStart(NULL,hpi_stream); + hpi_error=LogHpi(HPI_InStreamSetFormat(NULL,hpi_stream,&format),__LINE__); + hpi_error=LogHpi(HPI_InStreamStart(NULL,hpi_stream),__LINE__); // clock->start(2*fragment_time/3); - clock->start(100); + clock->start(RDHPIRECORDSTREAM_CLOCK_INTERVAL); is_ready=true; is_recording=false; is_paused=false; @@ -553,8 +576,8 @@ void RDHPIRecordStream::record() recordReady(); } record_started=false; - LogHpi(HPI_InStreamReset(NULL,hpi_stream)); - LogHpi(HPI_InStreamStart(NULL,hpi_stream)); + LogHpi(HPI_InStreamReset(NULL,hpi_stream),__LINE__); + LogHpi(HPI_InStreamStart(NULL,hpi_stream),__LINE__); is_recording=true; is_paused=false; emit isStopped(false); @@ -577,13 +600,14 @@ void RDHPIRecordStream::pause() if(!is_recording) { return; } - LogHpi(HPI_InStreamStop(NULL,hpi_stream)); + LogHpi(HPI_InStreamStop(NULL,hpi_stream),__LINE__); tickClock(); LogHpi(HPI_InStreamGetInfoEx(NULL,hpi_stream,&state,&buffer_size, - &data_recorded,&samples_recorded,&reserved)); + &data_recorded,&samples_recorded,&reserved), + __LINE__); is_recording=false; is_paused=true; - LogHpi(HPI_InStreamStart(NULL,hpi_stream)); + LogHpi(HPI_InStreamStart(NULL,hpi_stream),__LINE__); emit paused(); emit stateChanged(card_number,stream_number,2); // Paused if(debug) { @@ -599,7 +623,7 @@ void RDHPIRecordStream::stop() printf("RDHPIRecordStream: received stop()\n"); } if(is_ready|is_recording|is_paused) { - LogHpi(HPI_InStreamStop(NULL,hpi_stream)); + LogHpi(HPI_InStreamStop(NULL,hpi_stream),__LINE__); tickClock(); clock->stop(); is_recording=false; @@ -639,7 +663,7 @@ void RDHPIRecordStream::tickClock() { LogHpi(HPI_InStreamGetInfoEx(NULL,hpi_stream, &state,&buffer_size,&data_recorded, - &samples_recorded,&reserved)); + &samples_recorded,&reserved),__LINE__); if((!record_started)&&(is_recording)) { if(samples_recorded>0) { if(record_length>0) { @@ -656,22 +680,23 @@ void RDHPIRecordStream::tickClock() } while(data_recorded>fragment_size) { #if HPI_VER > 0x00030500 - LogHpi(HPI_InStreamReadBuf(NULL,hpi_stream,pdata,fragment_size)); + LogHpi(HPI_InStreamReadBuf(NULL,hpi_stream,pdata,fragment_size),__LINE__); #else - LogHpi(HPI_InStreamRead(NULL,hpi_stream,&hpi_data)); + LogHpi(HPI_InStreamRead(NULL,hpi_stream,&hpi_data),__LINE__); #endif if(is_recording) { writeWave(pdata,fragment_size); } LogHpi(HPI_InStreamGetInfoEx(NULL,hpi_stream,&state,&buffer_size, - &data_recorded,&samples_recorded,&reserved)); + &data_recorded,&samples_recorded,&reserved), + __LINE__); } if(state==HPI_STATE_STOPPED) { #if HPI_VER > 0x00030500 - LogHpi(HPI_InStreamReadBuf(NULL,hpi_stream,pdata,data_recorded)); + LogHpi(HPI_InStreamReadBuf(NULL,hpi_stream,pdata,data_recorded),__LINE__); #else - LogHpi(HPI_DataCreate(&hpi_data,&format,pdata,data_recorded)); - LogHpi(HPI_InStreamRead(NULL,hpi_stream,&hpi_data)); + LogHpi(HPI_DataCreate(&hpi_data,&format,pdata,data_recorded),__LINE__); + LogHpi(HPI_InStreamRead(NULL,hpi_stream,&hpi_data),__LINE__); #endif if(is_recording) { writeWave(pdata,data_recorded); @@ -691,30 +716,38 @@ bool RDHPIRecordStream::GetStream() char hpi_text[100]; if((hpi_err= - HPI_InStreamOpen(NULL,card_index[card_number],stream_number,&hpi_stream))!=0) { + LogHpi(HPI_InStreamOpen(NULL,card_index[card_number],stream_number, + &hpi_stream),__LINE__))!=0) { if(debug) { HPI_GetErrorText(hpi_err,hpi_text); fprintf(stderr,"*** HPI Error: %s ***\n",hpi_text); } return false; } + if(LogHpi(HPI_InStreamHostBufferAllocate(NULL,hpi_stream,dma_buffer_size), + __LINE__)!=0) { + LogHpi(HPI_InStreamHostBufferFree(NULL,hpi_stream),__LINE__); + LogHpi(HPI_InStreamClose(NULL,hpi_stream),__LINE__); + return false; + } return true; } void RDHPIRecordStream::FreeStream() { - LogHpi(HPI_InStreamClose(NULL,hpi_stream)); + LogHpi(HPI_InStreamHostBufferFree(NULL,hpi_stream),__LINE__); + LogHpi(HPI_InStreamClose(NULL,hpi_stream),__LINE__); } -hpi_err_t RDHPIRecordStream::LogHpi(hpi_err_t err) +hpi_err_t RDHPIRecordStream::LogHpi(hpi_err_t err,int lineno) { char err_txt[200]; if(err!=0) { HPI_GetErrorText(err,err_txt); - syslog(LOG_NOTICE,"HPI Error: %s",err_txt); + syslog(LOG_NOTICE,"HPI Error: %s, %s line %d",err_txt,__FILE__,lineno); } return err; } diff --git a/rdhpi/rdhpirecordstream.h b/rdhpi/rdhpirecordstream.h index 4d158277..0c5efa33 100644 --- a/rdhpi/rdhpirecordstream.h +++ b/rdhpi/rdhpirecordstream.h @@ -44,7 +44,6 @@ #define AUDIO_SIZE 32768 #define RDHPIRECORDSTREAM_CLOCK_INTERVAL 100 - class RDHPIRecordStream : public QObject,public RDWaveFile { Q_OBJECT @@ -94,7 +93,7 @@ class RDHPIRecordStream : public QObject,public RDWaveFile private: bool GetStream(); void FreeStream(); - hpi_err_t LogHpi(hpi_err_t err); + hpi_err_t LogHpi(hpi_err_t err,int lineno); RDHPISoundCard *sound_card; bool debug; bool xrun; @@ -130,6 +129,7 @@ class RDHPIRecordStream : public QObject,public RDWaveFile HPI_DATA hpi_data; #endif bool is_open; + uint32_t dma_buffer_size; }; diff --git a/rdhpi/rdhpisoundcard.cpp b/rdhpi/rdhpisoundcard.cpp index c0c6de31..90caf4ae 100644 --- a/rdhpi/rdhpisoundcard.cpp +++ b/rdhpi/rdhpisoundcard.cpp @@ -163,22 +163,25 @@ bool RDHPISoundCard::setClockSource(int card,RDHPISoundCard::ClockSource src) hpi_err_t hpi_err=0; switch(src) { - case RDHPISoundCard::Internal: - hpi_err=HPI_SampleClock_SetSource(NULL, - clock_source_control[card], - HPI_SAMPLECLOCK_SOURCE_LOCAL); - break; - case RDHPISoundCard::AesEbu: - case RDHPISoundCard::SpDiff: - hpi_err=HPI_SampleClock_SetSource(NULL, - clock_source_control[card], - HPI_SAMPLECLOCK_SOURCE_AESEBU_SYNC); - break; - case RDHPISoundCard::WordClock: - hpi_err=HPI_SampleClock_SetSource(NULL, - clock_source_control[card], - HPI_SAMPLECLOCK_SOURCE_WORD); - break; + case RDHPISoundCard::Internal: + hpi_err=HPI_SampleClock_SetSource(NULL, + clock_source_control[card], + HPI_SAMPLECLOCK_SOURCE_LOCAL); + break; + + case RDHPISoundCard::AesEbu: + case RDHPISoundCard::SpDiff: + hpi_err=LogHpi(HPI_SampleClock_SetSource(NULL, + clock_source_control[card], + HPI_SAMPLECLOCK_SOURCE_AESEBU_SYNC),__LINE__); + break; + + case RDHPISoundCard::WordClock: + hpi_err=LogHpi(HPI_SampleClock_SetSource(NULL, + clock_source_control[card], + HPI_SAMPLECLOCK_SOURCE_WORD), + __LINE__); + break; } return hpi_err==0; } @@ -226,7 +229,7 @@ RDHPISoundCard::SourceNode RDHPISoundCard::getInputPortMux(int card,int port) uint16_t index; LogHpi(HPI_Multiplexer_GetSource(NULL,input_mux_control[card][port], - &type,&index)); + &type,&index),__LINE__); return (RDHPISoundCard::SourceNode)type; } @@ -234,23 +237,25 @@ RDHPISoundCard::SourceNode RDHPISoundCard::getInputPortMux(int card,int port) bool RDHPISoundCard::setInputPortMux(int card,int port,RDHPISoundCard::SourceNode node) { switch(node) { - case RDHPISoundCard::LineIn: - if(HPI_Multiplexer_SetSource(NULL, - input_mux_control[card][port], - node,0)!=0) { - return false; - } - break; - case RDHPISoundCard::AesEbuIn: - if(HPI_Multiplexer_SetSource(NULL, - input_mux_control[card][port],node, - input_mux_index[card][port][1])!=0) { - return false; - } - break; - default: - return false; - break; + case RDHPISoundCard::LineIn: + if(HPI_Multiplexer_SetSource(NULL, + input_mux_control[card][port],node,0)!=0) { + return false; + } + break; + + case RDHPISoundCard::AesEbuIn: + if(LogHpi(HPI_Multiplexer_SetSource(NULL, + input_mux_control[card][port],node, + input_mux_index[card][port][1]), + __LINE__)!=0) { + return false; + } + break; + + default: + return false; + break; } return true; } @@ -263,7 +268,7 @@ unsigned short RDHPISoundCard::getInputPortError(int card,int port) if(input_port_aesebu[card][port]) { LogHpi(HPI_AESEBU_Receiver_GetErrorStatus(NULL, input_port_aesebu_control[card][port], - &error_word)); + &error_word),__LINE__); } return error_word; } @@ -279,12 +284,13 @@ void RDHPISoundCard::setFadeProfile(RDHPISoundCard::FadeProfile profile) { fade_type=profile; switch(fade_type) { - case RDHPISoundCard::Linear: - hpi_fade_type=HPI_VOLUME_AUTOFADE_LINEAR; - break; - case RDHPISoundCard::Log: - hpi_fade_type=HPI_VOLUME_AUTOFADE_LOG; - break; + case RDHPISoundCard::Linear: + hpi_fade_type=HPI_VOLUME_AUTOFADE_LINEAR; + break; + + case RDHPISoundCard::Log: + hpi_fade_type=HPI_VOLUME_AUTOFADE_LOG; + break; } } @@ -366,7 +372,8 @@ bool RDHPISoundCard::inputStreamMeter(int card,int stream,short *level) return false; } LogHpi(HPI_MeterGetPeak(NULL, - input_stream_meter_control[card][stream],level)); + input_stream_meter_control[card][stream],level), + __LINE__); return true; } @@ -379,8 +386,8 @@ bool RDHPISoundCard::outputStreamMeter(int card,int stream,short *level) if(stream>=card_output_streams[card]) { return false; } - LogHpi(HPI_MeterGetPeak(NULL, - output_stream_meter_control[card][stream],level)); + LogHpi(HPI_MeterGetPeak(NULL,output_stream_meter_control[card][stream], + level),__LINE__); return true; } @@ -393,8 +400,8 @@ bool RDHPISoundCard::inputPortMeter(int card,int port,short *level) if(port>=card_input_ports[card]) { return false; } - LogHpi(HPI_MeterGetPeak(NULL, - input_port_meter_control[card][port],level)); + LogHpi(HPI_MeterGetPeak(NULL,input_port_meter_control[card][port],level), + __LINE__); return true; } @@ -407,7 +414,8 @@ bool RDHPISoundCard::outputPortMeter(int card,int port,short *level) if(port>=card_output_ports[card]) { return false; } - LogHpi(HPI_MeterGetPeak(NULL,output_port_meter_control[card][port],level)); + LogHpi(HPI_MeterGetPeak(NULL,output_port_meter_control[card][port],level), + __LINE__); return true; } @@ -433,15 +441,17 @@ bool RDHPISoundCard::haveInputPortMux(int card,int port) const bool RDHPISoundCard::queryInputPortMux(int card,int port,SourceNode node) const { switch(node) { - case RDHPISoundCard::LineIn: - return input_port_mux_type[card][port][0]; - break; - case RDHPISoundCard::AesEbuIn: - return input_port_mux_type[card][port][1]; - break; - default: - return false; - break; + case RDHPISoundCard::LineIn: + return input_port_mux_type[card][port][0]; + break; + + case RDHPISoundCard::AesEbuIn: + return input_port_mux_type[card][port][1]; + break; + + default: + return false; + break; } } @@ -456,8 +466,8 @@ int RDHPISoundCard::getInputVolume(int card,int stream,int port) { short gain[2]; - LogHpi(HPI_VolumeGetGain(NULL, - input_stream_volume_control[card][stream][port],gain)); + LogHpi(HPI_VolumeGetGain(NULL,input_stream_volume_control[card][stream][port], + gain),__LINE__); return gain[0]; } @@ -466,8 +476,7 @@ int RDHPISoundCard::getOutputVolume(int card,int stream,int port) { short gain[2]; - LogHpi(HPI_VolumeGetGain(NULL, - output_stream_volume_control[card][stream][port],gain)); + LogHpi(HPI_VolumeGetGain(NULL,output_stream_volume_control[card][stream][port],gain),__LINE__); return gain[0]; } @@ -476,7 +485,8 @@ int RDHPISoundCard::getInputLevel(int card,int port) { short gain[2]; - LogHpi(HPI_VolumeGetGain(NULL,input_port_level_control[card][port],gain)); + LogHpi(HPI_VolumeGetGain(NULL,input_port_level_control[card][port],gain), + __LINE__); return gain[0]; } @@ -485,7 +495,8 @@ int RDHPISoundCard::getOutputLevel(int card,int port) { short gain[2]; - LogHpi(HPI_VolumeGetGain(NULL,output_port_level_control[card][port],gain)); + LogHpi(HPI_VolumeGetGain(NULL,output_port_level_control[card][port],gain), + __LINE__); return gain[0]; } @@ -499,8 +510,8 @@ void RDHPISoundCard::setInputVolume(int card,int stream,int level) short gain[2]; gain[0]=level; gain[1]=level; - LogHpi(HPI_VolumeSetGain(NULL, - input_stream_volume_control[card][stream][0],gain)); + LogHpi(HPI_VolumeSetGain(NULL,input_stream_volume_control[card][stream][0], + gain),__LINE__); } @@ -514,7 +525,7 @@ void RDHPISoundCard::setOutputVolume(int card,int stream,int port,int level) gain[1]=level; LogHpi(HPI_VolumeSetGain(NULL, output_stream_volume_control[card][stream][port], - gain)); + gain),__LINE__); } @@ -531,7 +542,7 @@ void RDHPISoundCard::fadeOutputVolume(int card,int stream,int port, gain[1]=level; LogHpi(HPI_VolumeAutoFadeProfile(NULL, output_stream_volume_control[card][stream][port], - gain,length,hpi_fade_type)); + gain,length,hpi_fade_type),__LINE__); } @@ -545,7 +556,8 @@ void RDHPISoundCard::setInputLevel(int card,int port,int level) for(unsigned i=0;i>13)&7); hpi_info[i].setDspMinorVersion((dummy_version>>7)&63); hpi_info[i].setPcbVersion((char)(((dummy_version>>3)&7)+'A')); hpi_info[i].setAssemblyVersion(dummy_version&7); - LogHpi(HPI_AdapterClose(NULL,card_index[i])); + LogHpi(HPI_AdapterClose(NULL,card_index[i]),__LINE__); str=QString(tr("Input Stream")); for(int j=0;j -## -## 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 -## published by the Free Software Foundation. -## -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -## You should have received a copy of the GNU General Public -## License along with this program; if not, write to the Free Software -## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -## -## Use automake to process this into a Makefile.in -## - -AM_CPPFLAGS = -Wall -DPREFIX=\"$(prefix)\" -DQTDIR=\"@QT_DIR@\" @QT_CXXFLAGS@ -I$(top_srcdir)/lib -I$(top_srcdir)/rdhpi -LIBS = @QT_LIBS@ -L$(top_srcdir)/lib -L$(top_srcdir)/rdhpi -MOC = @QT_MOC@ - -# The dependency for qt's Meta Object Compiler (moc) -moc_%.cpp: %.h - $(MOC) $< -o $@ - -bin_PROGRAMS = rdhpiinfo - -dist_rdhpiinfo_SOURCES = change_mode.cpp change_mode.h\ - rdhpiinfo.cpp rdhpiinfo.h\ - virtdetails.cpp virtdetails.h - -nodist_rdhpiinfo_SOURCES = moc_change_mode.cpp\ - moc_rdhpiinfo.cpp\ - moc_virtdetails.cpp - -rdhpiinfo_LDADD = @LIB_RDLIBS@ @LIBVORBIS@ @LIBHPI@ - -EXTRA_DIST = rdhpiinfo.pro - -CLEANFILES = *~\ - *.qm\ - moc_* - -MAINTAINERCLEANFILES = *~\ - Makefile.in\ - moc_* diff --git a/utils/rdhpiinfo/change_mode.cpp b/utils/rdhpiinfo/change_mode.cpp deleted file mode 100644 index 84780b67..00000000 --- a/utils/rdhpiinfo/change_mode.cpp +++ /dev/null @@ -1,194 +0,0 @@ -// change_mode.cpp -// -// Change the mode of an AudioScience Adapter. -// -// (C) Copyright 2002-2014,2016 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 -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public -// License along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -// - -#include -#include -#include - -#include - -ChangeMode::ChangeMode(unsigned short card,unsigned short type,int mode, - QWidget *parent) - : QDialog(parent,"",true) -{ - QString str; - - // - // Fix the Window Size - // - setMinimumWidth(sizeHint().width()); - setMaximumWidth(sizeHint().width()); - setMinimumHeight(sizeHint().height()); - setMaximumHeight(sizeHint().height()); - - setCaption(tr("RdHPIInfo - Change Mode")); - - // - // Create Fonts - // - QFont font=QFont("Helvetica",12,QFont::Normal); - font.setPixelSize(12); - QFont label_font=QFont("Helvetica",12,QFont::Bold); - label_font.setPixelSize(12); - - // - // Adapter Type - // - QLabel *label=new QLabel(QString().sprintf("AudioScience %X",type),this); - label->setGeometry(10,10,sizeHint().width()-20,15); - label->setFont(label_font); - label->setAlignment(AlignCenter); - - // - // Adapter Mode - // - change_mode_box=new QComboBox(this); - change_mode_box->setGeometry(10,35,sizeHint().width()-20,22); - change_mode_box->setFont(font); - int index=0; - for(uint32_t i=1;i<14;i++) { - if(HPI_AdapterSetModeEx(NULL,card,i,HPI_ADAPTER_MODE_QUERY)==0) { - switch(i) { - case HPI_ADAPTER_MODE_4OSTREAM: - change_mode_box->insertItem(tr("Four Output Streams")); - break; - - case HPI_ADAPTER_MODE_6OSTREAM: - change_mode_box->insertItem(tr("Six Output Streams")); - break; - - case HPI_ADAPTER_MODE_8OSTREAM: - change_mode_box->insertItem(tr("Eight Output Streams")); - break; - - case HPI_ADAPTER_MODE_12OSTREAM: - change_mode_box->insertItem(tr("Twelve Output Streams")); - break; - - case HPI_ADAPTER_MODE_16OSTREAM: - change_mode_box->insertItem(tr("Sixteen Output Streams")); - break; - - case HPI_ADAPTER_MODE_1OSTREAM: - change_mode_box->insertItem(tr("One Output Stream")); - break; - - case HPI_ADAPTER_MODE_1: - change_mode_box->insertItem(tr("Mode 1")); - break; - - case HPI_ADAPTER_MODE_2: - change_mode_box->insertItem(tr("Mode 2")); - break; - - case HPI_ADAPTER_MODE_3: - change_mode_box->insertItem(tr("Mode 3")); - break; - - case HPI_ADAPTER_MODE_MULTICHANNEL: - change_mode_box->insertItem(tr("Surround Sound [SSX]")); - break; - - case HPI_ADAPTER_MODE_9OSTREAM: - change_mode_box->insertItem(tr("Nine Output Stream")); - break; - - case HPI_ADAPTER_MODE_MONO: - change_mode_box->insertItem(tr("Mono Mode")); - break; - - case HPI_ADAPTER_MODE_LOW_LATENCY: - change_mode_box->insertItem(tr("Low Latency Mode")); - break; - - default: - str=QString(tr("Unknown")); - change_mode_box-> - insertItem(QString().sprintf(" %s [MODE=%u]\n", - (const char *)str,(unsigned)i)); - break; - } - hpi_mode_map[index]=i; - if(mode==(int)i) { - change_mode_box->setCurrentItem(index); - change_index=index; - } - index++; - } - } - - // - // Ok Button - // - QPushButton *ok_button=new QPushButton(this); - ok_button->setGeometry(sizeHint().width()-140,sizeHint().height()-40,60,30); - ok_button->setDefault(true); - ok_button->setFont(font); - ok_button->setText(tr("&OK")); - connect(ok_button,SIGNAL(clicked()),this,SLOT(okData())); - - // - // Cancel Button - // - QPushButton *cancel_button=new QPushButton(this); - cancel_button->setGeometry(sizeHint().width()-70,sizeHint().height()-40, - 60,30); - cancel_button->setFont(font); - cancel_button->setText(tr("&Cancel")); - connect(cancel_button,SIGNAL(clicked()),this,SLOT(cancelData())); -} - - -QSize ChangeMode::sizeHint() const -{ - return QSize(280,110); -} - - -QSizePolicy ChangeMode::sizePolicy() const -{ - return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); -} - - -void ChangeMode::closeEvent(QCloseEvent *e) -{ - cancelData(); -} - - -void ChangeMode::okData() -{ - if(change_mode_box->currentItem()==change_index) { - done(-1); - return; - } - if(QMessageBox::warning(this,"RDHPIInfo",tr("The HPI driver will need to be restarted\nafter changing the mode. Continue?"),QMessageBox::Yes,QMessageBox::No)==QMessageBox::No) { - return; - } - done(hpi_mode_map[change_mode_box->currentItem()]); - return; -} - - -void ChangeMode::cancelData() -{ - done(-1); -} diff --git a/utils/rdhpiinfo/change_mode.h b/utils/rdhpiinfo/change_mode.h deleted file mode 100644 index b66d44be..00000000 --- a/utils/rdhpiinfo/change_mode.h +++ /dev/null @@ -1,58 +0,0 @@ -// change_mode.h -// -// Change the mode of an AudioScience Adapter -// -// (C) Copyright 2002-2005,2016 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 -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public -// License along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -// - -#ifndef CHANGE_MODE_H -#define CHANGE_MODE_H - -#define MAX_HPI_MODES 11 - -#include -#include - -#include -#ifndef HPI_ADAPTER_MODE_MULTICHANNEL -#define HPI_ADAPTER_MODE_MULTICHANNEL (9) -#endif - -class ChangeMode : public QDialog -{ - Q_OBJECT - public: - ChangeMode(unsigned short card,unsigned short type,int mode, - QWidget *parent=0); - QSize sizeHint() const; - QSizePolicy sizePolicy() const; - - protected: - void closeEvent(QCloseEvent *e); - - private slots: - void okData(); - void cancelData(); - - private: - int change_index; - uint32_t hpi_mode_map[MAX_HPI_MODES]; - QComboBox *change_mode_box; -}; - - -#endif - diff --git a/utils/rdhpiinfo/rdhpiinfo.cpp b/utils/rdhpiinfo/rdhpiinfo.cpp deleted file mode 100644 index d1d7535f..00000000 --- a/utils/rdhpiinfo/rdhpiinfo.cpp +++ /dev/null @@ -1,481 +0,0 @@ -// rdhpiinfo.cpp -// -// A Qt-based application for display information on ASI cards. -// -// (C) Copyright 2002-2014,2016 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 -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public -// License along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -// - -#include -#include - -#include -#include -#include -#include -#include -#include - -#include - -#include "rdhpiinfo.h" -#include "change_mode.h" -#include "virtdetails.h" - -MainWidget::MainWidget(QWidget *parent) - :QWidget(parent) -{ - setCaption(tr("RDHPIInfo")+" v"+VERSION); - - // - // Fix the Window Size - // - setMinimumWidth(sizeHint().width()); - setMaximumWidth(sizeHint().width()); - setMinimumHeight(sizeHint().height()); - setMaximumHeight(sizeHint().height()); - - // - // Load the command-line arguments - // - RDCmdSwitch *cmd=new RDCmdSwitch(qApp->argc(),qApp->argv(),"rdhpiinfo", - RDHPIINFO_USAGE); - delete cmd; - - // - // Generate Fonts - // - QFont font("Helvetica",12,QFont::Normal); - font.setPixelSize(12); - QFont label_font("Helvetica",12,QFont::Bold); - label_font.setPixelSize(12); - - // - // Open HPI - // - if(HPI_SubSysCreate()==NULL) { - QMessageBox::warning(this,tr("HPI Error"), - tr("The ASI HPI Driver is not loaded!")); - exit(1); - } - - // - // HPI Version - // - HpiErr(HPI_SubSysGetVersionEx(NULL,&hpi_version),"HPI_SubSysGetVersionEx"); - QLabel *label=new QLabel(tr("HPI Version:"),this); - label->setGeometry(10,10,85,20); - label->setFont(label_font); - label=new QLabel(QString().sprintf("%d.%02d.%02d", - (unsigned)((hpi_version>>16)&0xffff), - (unsigned)((hpi_version>>8)&0xff), - (unsigned)hpi_version&0xff),this); - label->setGeometry(100,10,100,20); - label->setFont(font); - - // - // Adapter Name - // - info_name_box=new QComboBox(this); - info_name_box->setGeometry(100,34,sizeHint().width()-110,20); - info_name_box->setFont(font); - info_name_label=new QLabel(info_name_box,tr("Adapter:"),this); - info_name_label->setGeometry(10,34,85,20); - info_name_label->setFont(label_font); - info_name_label->setAlignment(AlignRight|AlignVCenter); - connect(info_name_box,SIGNAL(activated(int)), - this,SLOT(nameActivatedData(int))); - - // - // Adapter Index - // - label=new QLabel(tr("Adapter Index:"),this); - label->setGeometry(10,58,105,20); - label->setFont(label_font); - label->setAlignment(AlignRight|AlignVCenter); - info_index_label=new QLabel(this); - info_index_label->setGeometry(120,58,100,20); - info_index_label->setFont(font); - info_index_label->setAlignment(AlignLeft|AlignVCenter); - - // - // Serial Number - // - label=new QLabel(tr("Serial Number:"),this); - label->setGeometry(10,78,105,20); - label->setFont(label_font); - label->setAlignment(AlignRight|AlignVCenter); - info_serial_label=new QLabel(this); - info_serial_label->setGeometry(120,78,100,20); - info_serial_label->setFont(font); - info_serial_label->setAlignment(AlignLeft|AlignVCenter); - - // - // Output Streams - // - label=new QLabel(tr("Input Streams:"),this); - label->setGeometry(10,98,105,20); - label->setFont(label_font); - label->setAlignment(AlignRight|AlignVCenter); - info_istreams_label=new QLabel(this); - info_istreams_label->setGeometry(120,98,100,20); - info_istreams_label->setFont(font); - info_istreams_label->setAlignment(AlignLeft|AlignVCenter); - - // - // Input Streams - // - label=new QLabel(tr("Output Streams:"),this); - label->setGeometry(10,118,105,20); - label->setFont(label_font); - label->setAlignment(AlignRight|AlignVCenter); - info_ostreams_label=new QLabel(this); - info_ostreams_label->setGeometry(120,118,100,20); - info_ostreams_label->setFont(font); - info_ostreams_label->setAlignment(AlignLeft|AlignVCenter); - - // - // DSP Version - // - label=new QLabel(tr("DSP Version:"),this); - label->setGeometry(10,138,105,20); - label->setFont(label_font); - label->setAlignment(AlignRight|AlignVCenter); - info_dsp_label=new QLabel(this); - info_dsp_label->setGeometry(120,138,100,20); - info_dsp_label->setFont(font); - info_dsp_label->setAlignment(AlignLeft|AlignVCenter); - - // - // Adapter Version - // - label=new QLabel(tr("Adapter Version:"),this); - label->setGeometry(10,158,105,20); - label->setFont(label_font); - label->setAlignment(AlignRight|AlignVCenter); - info_adapter_label=new QLabel(this); - info_adapter_label->setGeometry(120,158,100,20); - info_adapter_label->setFont(font); - info_adapter_label->setAlignment(AlignLeft|AlignVCenter); - - // - // DSP Utilization - // - info_utilization_label=new QLabel(tr("DSP Utilization")+":",this); - info_utilization_label->setGeometry(10,183,105,20); - info_utilization_label->setFont(label_font); - info_utilization_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); - info_utilization_label->setDisabled(true); - info_utilization_edit=new QLineEdit(this); - info_utilization_edit->setGeometry(120,183,60,20); - info_utilization_edit->setFont(font); - info_utilization_edit->setReadOnly(true); - info_utilization_edit->setDisabled(true); - info_utilization_button=new QPushButton(tr("Details"),this); - info_utilization_button->setGeometry(190,180,70,26); - info_utilization_button->setFont(font); - info_utilization_button->setDisabled(true); - connect(info_utilization_button,SIGNAL(clicked()), - this,SLOT(utilizationData())); - - // - // Adapter Mode - // - label=new QLabel(tr("Adapter Mode:"),this); - label->setGeometry(10,213,105,20); - label->setFont(label_font); - label->setAlignment(AlignRight|AlignVCenter); - info_mode_edit=new QLineEdit(this); - info_mode_edit->setGeometry(120,213,sizeHint().width()-210,20); - info_mode_edit->setReadOnly(true); - info_mode_edit->setFont(font); - info_mode_edit->setAlignment(AlignLeft|AlignVCenter); - info_changemode_button= - new QPushButton(tr("Change"),this); - info_changemode_button->setGeometry(sizeHint().width()-80,210,70,26); - info_changemode_button->setFont(font); - connect(info_changemode_button,SIGNAL(clicked()), - this,SLOT(changeModeData())); - - // - // Close Button - // - QPushButton *button=new QPushButton(tr("Close"),this); - button->setGeometry(sizeHint().width()-60,sizeHint().height()-40,50,30); - button->setFont(label_font); - connect(button,SIGNAL(clicked()),qApp,SLOT(quit())); - - LoadAdapters(); - - hpi_profile_timer=new QTimer(this); - connect(hpi_profile_timer,SIGNAL(timeout()), - this,SLOT(updateDspUtilization())); - - if(info_name_box->count()>0) { - nameActivatedData(0); - hpi_profile_timer->start(1000); - } -} - - -MainWidget::~MainWidget() -{ - HPI_SubSysFree(NULL); -} - - -QSize MainWidget::sizeHint() const -{ - return QSize(400,290); -} - - -QSizePolicy MainWidget::sizePolicy() const -{ - return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); -} - - -void MainWidget::nameActivatedData(int id) -{ - QString str; - int card=name_map[id]; - info_index_label-> - setText(QString().sprintf("%u",(unsigned)hpi_indexes[card]+1)); - info_serial_label-> - setText(QString().sprintf("%u",(unsigned)hpi_serial[card])); - info_istreams_label-> - setText(QString().sprintf("%d",hpi_istreams[card])); - info_ostreams_label-> - setText(QString().sprintf("%d",hpi_ostreams[card])); - info_dsp_label->setText(QString().sprintf("%d.%d", - hpi_card_version[card]>>13, - (hpi_card_version[card]>>7)&63)); - info_adapter_label-> - setText(QString().sprintf("%c%d", - ((hpi_card_version[card]>>3)&15)+'A', - hpi_card_version[card]&7)); - switch(hpi_mode[card]) { - case 0: // No mode support - info_mode_edit->setText(tr("Standard")); - info_changemode_button->setDisabled(true); - break; - - case HPI_ADAPTER_MODE_4OSTREAM: - info_mode_edit->setText(tr("Four Output Streams")); - info_changemode_button->setEnabled(true); - break; - - case HPI_ADAPTER_MODE_6OSTREAM: - info_mode_edit->setText(tr("Six Output Streams")); - info_changemode_button->setEnabled(true); - break; - - case HPI_ADAPTER_MODE_8OSTREAM: - info_mode_edit->setText(tr("Eight Output Streams")); - info_changemode_button->setEnabled(true); - break; - - case HPI_ADAPTER_MODE_12OSTREAM: - info_mode_edit->setText(tr("Twelve Output Streams")); - info_changemode_button->setEnabled(true); - break; - - case HPI_ADAPTER_MODE_16OSTREAM: - info_mode_edit->setText(tr("Sixteen Output Streams")); - info_changemode_button->setEnabled(true); - break; - - case HPI_ADAPTER_MODE_1OSTREAM: - info_mode_edit->setText(tr("One Output Stream")); - info_changemode_button->setEnabled(true); - break; - - case HPI_ADAPTER_MODE_1: - info_mode_edit->setText(tr("Mode 1")); - info_changemode_button->setEnabled(true); - break; - - case HPI_ADAPTER_MODE_2: - info_mode_edit->setText(tr("Mode 2")); - info_changemode_button->setEnabled(true); - break; - - case HPI_ADAPTER_MODE_3: - info_mode_edit->setText(tr("Mode 3")); - info_changemode_button->setEnabled(true); - break; - - case HPI_ADAPTER_MODE_MULTICHANNEL: - info_mode_edit->setText(tr("Surround Sound [SSX]")); - info_changemode_button->setEnabled(true); - break; - - case HPI_ADAPTER_MODE_9OSTREAM: - info_mode_edit->setText(tr("Nine Output Stream")); - info_changemode_button->setEnabled(true); - break; - - case HPI_ADAPTER_MODE_MONO: - info_mode_edit->setText(tr("Mono Mode")); - info_changemode_button->setEnabled(true); - break; - - case HPI_ADAPTER_MODE_LOW_LATENCY: - info_mode_edit->setText(tr("Low Latency Mode")); - info_changemode_button->setEnabled(true); - break; - - default: - info_mode_edit->setText(tr("N/A")); - info_changemode_button->setDisabled(true); - if(hpi_mode[card]!=hpi_serial[card]) { - str=QString(tr("rdhpiinfo: unknown adapter mode")); - fprintf(stderr,"%s %d\n",(const char *)str,hpi_mode[card]); - } - break; - } -} - - -void MainWidget::changeModeData() -{ - int card=name_map[info_name_box->currentItem()]; - int mode; - QString str; - hpi_err_t hpi_err; - char hpi_text[100]; - ChangeMode *dialog=new ChangeMode(card,hpi_type[card],hpi_mode[card],this); - if((mode=dialog->exec())<0) { - delete dialog; - return; - } - delete dialog; - hpi_err=HPI_AdapterOpen(NULL,card); - if((hpi_err=HPI_AdapterSetMode(NULL,card,mode))==0) { - QMessageBox::information(this,tr("RdhpiInfo"), - tr("The adapter mode has been changed.\nYou must now restart the HPI driver!")); - } - else { - HPI_GetErrorText(hpi_err,hpi_text); - str=QString(tr("HPI Error")); - QMessageBox::warning(this,tr("RdhpiInfo"), - QString().sprintf("%s %d:\n\"%s\"",(const char *)str, - (int)hpi_err,hpi_text)); - } - hpi_err=HPI_AdapterClose(NULL,card); -} - - -void MainWidget::utilizationData() -{ - VirtDetails *d=new VirtDetails(hpi_indexes[info_name_box->currentItem()], - hpi_profile[info_name_box->currentItem()], - hpi_profile_quan[info_name_box->currentItem()], - this); - hpi_profile_timer->stop(); - d->exec(); - hpi_profile_timer->start(1000); - delete d; -} - - -void MainWidget::updateDspUtilization() -{ - uint32_t util=0; - - if(HpiErr(HPI_ProfileGetUtilization(NULL, - hpi_profile[info_name_box->currentItem()], - &util))==0) { - info_utilization_edit->setText(QString().sprintf("%5.1lf%%", - (double)util/100.0)); - info_utilization_label->setEnabled(true); - info_utilization_edit->setEnabled(true); - info_utilization_button->setEnabled(true); - } - else { - info_utilization_edit->setText("xx.x"); - info_utilization_label->setDisabled(true); - info_utilization_edit->setDisabled(true); - info_utilization_button->setDisabled(true); - } -} - - -void MainWidget::LoadAdapters() -{ - int num_adapters; - - HpiErr(HPI_SubSysGetNumAdapters(NULL,&num_adapters), - "HPI_SubSysGetNumAdapters"); - for(int i=0;iinsertItem(QString().sprintf("AudioScience %X [%d]", - hpi_type[i],i+1)); - name_map[info_name_box->count()-1]=i; - HpiErr(HPI_AdapterOpen(NULL,hpi_indexes[i]),"HPI_AdapterOpen"); - HpiErr(HPI_AdapterGetInfo(NULL,hpi_indexes[i],&hpi_ostreams[i],&hpi_istreams[i], - &hpi_card_version[i],hpi_serial+i, - &hpi_type[i]),"HPI_AdapterGetInfo"); - HpiErr(HPI_AdapterGetMode(NULL,hpi_indexes[i],&hpi_mode[i]), - "HPI_AdapterGetMode"); - HpiErr(HPI_AdapterClose(NULL,hpi_indexes[i]),"HPI_AdapterClose"); - HpiErr(HPI_ProfileOpenAll(NULL,hpi_indexes[i],0,&hpi_profile[i], - &hpi_profile_quan[i])); - } - } -} - - -hpi_err_t MainWidget::HpiErr(hpi_err_t err,const char *func_name) const -{ - char hpi_str[200]; - - if(err==HPI_ERROR_INVALID_FUNC) { - return err; - } - if(err!=0) { - HPI_GetErrorText(err,hpi_str); - if(func_name==NULL) { - fprintf(stderr,"rdhpiinfo: %s\n",hpi_str); - } - else { - fprintf(stderr,"rdhpiinfo[%s]: %s\n",func_name,hpi_str); - } - } - return err; -} - - -int main(int argc,char *argv[]) -{ - QApplication a(argc,argv); - - // - // Start Event Loop - // - MainWidget *w=new MainWidget(); - a.setMainWidget(w); - w->setGeometry(QRect(QPoint(0,0),w->sizeHint())); - w->show(); - return a.exec(); -} diff --git a/utils/rdhpiinfo/rdhpiinfo.h b/utils/rdhpiinfo/rdhpiinfo.h deleted file mode 100644 index 5fa5d2bd..00000000 --- a/utils/rdhpiinfo/rdhpiinfo.h +++ /dev/null @@ -1,86 +0,0 @@ -// rdhpiinfo.h -// -// A Qt-based application for display info about ASI cards. -// -// (C) Copyright 2002-2005,2016 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 -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public -// License along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -// - -#ifndef RDHPIINFO_H -#define RDHPIINFO_H - -#include -#include -#include -#include -#include -#include - -#include -#if HPI_VER < 0x040600 -typedef uint16_t hpi_err_t; -typedef uint32_t hpi_handle_t; -#endif - -#define RDHPIINFO_USAGE "\n" - -class MainWidget : public QWidget -{ - Q_OBJECT - public: - MainWidget(QWidget *parent=0); - ~MainWidget(); - QSize sizeHint() const; - QSizePolicy sizePolicy() const; - - private slots: - void nameActivatedData(int id); - void changeModeData(); - void utilizationData(); - void updateDspUtilization(); - - private: - void LoadAdapters(); - hpi_err_t HpiErr(hpi_err_t err,const char *func_name=0) const; - QLabel *info_name_label; - QComboBox *info_name_box; - QLabel *info_utilization_label; - QLineEdit *info_utilization_edit; - QPushButton *info_utilization_button; - QLabel *info_index_label; - QLabel *info_serial_label; - QLabel *info_istreams_label; - QLabel *info_ostreams_label; - QLabel *info_dsp_label; - QLabel *info_adapter_label; - QLineEdit *info_mode_edit; - QPushButton *info_changemode_button; - uint32_t hpi_version; - QString hpi_name[HPI_MAX_ADAPTERS]; - int name_map[HPI_MAX_ADAPTERS]; - uint32_t hpi_indexes[HPI_MAX_ADAPTERS]; - uint16_t hpi_ostreams[HPI_MAX_ADAPTERS]; - uint16_t hpi_istreams[HPI_MAX_ADAPTERS]; - uint16_t hpi_card_version[HPI_MAX_ADAPTERS]; - uint32_t hpi_serial[HPI_MAX_ADAPTERS]; - uint16_t hpi_type[HPI_MAX_ADAPTERS]; - uint32_t hpi_mode[HPI_MAX_ADAPTERS]; - hpi_handle_t hpi_profile[HPI_MAX_ADAPTERS]; - uint16_t hpi_profile_quan[HPI_MAX_ADAPTERS]; - QTimer *hpi_profile_timer; -}; - - -#endif // RDHPIINFO_H diff --git a/utils/rdhpiinfo/rdhpiinfo.pro b/utils/rdhpiinfo/rdhpiinfo.pro deleted file mode 100644 index e69de29b..00000000 diff --git a/utils/rdhpiinfo/virtdetails.cpp b/utils/rdhpiinfo/virtdetails.cpp deleted file mode 100644 index 665f0054..00000000 --- a/utils/rdhpiinfo/virtdetails.cpp +++ /dev/null @@ -1,200 +0,0 @@ -// virtdetails.cpp -// -// Show profile details for an AudioScience adapter. -// -// (C) Copyright 2014 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 -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public -// License along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -// - -#include -#include -#include - -#include "virtdetails.h" - -VirtDetails::VirtDetails(uint16_t card,hpi_handle_t profile, - uint16_t profile_quan,QWidget *parent) - : QDialog(parent,"",true) -{ - char name[200]; - - virt_card=card; - virt_profile=profile; - - // - // Fix the Window Size - // - setMinimumWidth(sizeHint().width()); - setMaximumWidth(sizeHint().width()); - setMinimumHeight(sizeHint().height()); - setMaximumHeight(sizeHint().height()); - - setCaption(tr("RdHPIInfo - Profile Details")); - - // - // Create Fonts - // - QFont font=QFont("Helvetica",12,QFont::Normal); - font.setPixelSize(12); - QFont label_font=QFont("Helvetica",12,QFont::Bold); - label_font.setPixelSize(12); - - // - // Adapter Mode - // - virt_profile_box=new QComboBox(this); - virt_profile_box->setGeometry(75,10,sizeHint().width()-85,20); - virt_profile_box->setFont(font); - virt_profile_label=new QLabel(virt_profile_box,tr("Profile")+":",this); - virt_profile_label->setGeometry(10,10,60,20); - virt_profile_label->setFont(label_font); - virt_profile_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); - for(uint16_t i=0;iinsertItem(name); - } - } - } - - // - // Utilization Counter - // - virt_utilization_label=new QLabel(tr("Overall DSP Utilization")+":",this); - virt_utilization_label->setGeometry(10,35,160,20); - virt_utilization_label->setFont(label_font); - virt_utilization_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); - virt_utilization_edit=new QLineEdit(this); - virt_utilization_edit->setGeometry(175,35,90,20); - virt_utilization_edit->setFont(font); - virt_utilization_edit->setReadOnly(true); - - // - // Profile Interval Counter - // - virt_interval_label=new QLabel(tr("Profile Interval")+":",this); - virt_interval_label->setGeometry(10,57,160,20); - virt_interval_label->setFont(label_font); - virt_interval_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); - virt_interval_edit=new QLineEdit(this); - virt_interval_edit->setGeometry(175,57,90,20); - virt_interval_edit->setFont(font); - virt_interval_edit->setReadOnly(true); - - // - // Total Tick Count Counter - // - virt_total_ticks_label=new QLabel(tr("Total Tick Count")+":",this); - virt_total_ticks_label->setGeometry(10,79,160,20); - virt_total_ticks_label->setFont(label_font); - virt_total_ticks_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); - virt_total_ticks_edit=new QLineEdit(this); - virt_total_ticks_edit->setGeometry(175,79,90,20); - virt_total_ticks_edit->setFont(font); - virt_total_ticks_edit->setReadOnly(true); - - // - // Call Count Counter - // - virt_call_count_label=new QLabel(tr("Call Count")+":",this); - virt_call_count_label->setGeometry(10,101,160,20); - virt_call_count_label->setFont(label_font); - virt_call_count_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); - virt_call_count_edit=new QLineEdit(this); - virt_call_count_edit->setGeometry(175,101,90,20); - virt_call_count_edit->setFont(font); - virt_call_count_edit->setReadOnly(true); - - // - // Maximum Ticks Counter - // - virt_max_ticks_label=new QLabel(tr("Maximum Ticks / Pass")+":",this); - virt_max_ticks_label->setGeometry(10,123,160,20); - virt_max_ticks_label->setFont(label_font); - virt_max_ticks_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); - virt_max_ticks_edit=new QLineEdit(this); - virt_max_ticks_edit->setGeometry(175,123,90,20); - virt_max_ticks_edit->setFont(font); - virt_max_ticks_edit->setReadOnly(true); - - // - // Ticks per Millisecond Counter - // - virt_ticks_per_ms_label=new QLabel(tr("Ticks / mS")+":",this); - virt_ticks_per_ms_label->setGeometry(10,145,160,20); - virt_ticks_per_ms_label->setFont(label_font); - virt_ticks_per_ms_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); - virt_ticks_per_ms_edit=new QLineEdit(this); - virt_ticks_per_ms_edit->setGeometry(175,145,90,20); - virt_ticks_per_ms_edit->setFont(font); - virt_ticks_per_ms_edit->setReadOnly(true); - - // - // Close Button - // - QPushButton *close_button=new QPushButton(this); - close_button->setGeometry(sizeHint().width()-70,sizeHint().height()-40, - 60,30); - close_button->setFont(font); - close_button->setText(tr("&Close")); - connect(close_button,SIGNAL(clicked()),this,SLOT(closeData())); - - QTimer *timer=new QTimer(this); - connect(timer,SIGNAL(timeout()),this,SLOT(updateProfileData())); - timer->start(1000); -} - - -QSize VirtDetails::sizeHint() const -{ - return QSize(280,222); -} - - -QSizePolicy VirtDetails::sizePolicy() const -{ - return QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); -} - - -void VirtDetails::updateProfileData() -{ - uint32_t utilization; - uint16_t interval; - uint32_t total_ticks; - uint32_t call_count; - uint32_t max_ticks; - uint32_t ticks_per_ms; - - if(HPI_ProfileGetUtilization(NULL,virt_profile,&utilization)==0) { - virt_utilization_edit-> - setText(QString().sprintf("%5.1lf%%",(double)utilization/100.0)); - } - if(HPI_ProfileGet(NULL,virt_profile,virt_profile_box->currentItem(), - &interval,&total_ticks,&call_count,&max_ticks, - &ticks_per_ms)==0) { - virt_interval_edit->setText(QString().sprintf("%u sec",interval)); - virt_total_ticks_edit->setText(QString().sprintf("%u",total_ticks)); - virt_call_count_edit->setText(QString().sprintf("%u",call_count)); - virt_max_ticks_edit->setText(QString().sprintf("%u",max_ticks)); - virt_ticks_per_ms_edit->setText(QString().sprintf("%u",ticks_per_ms)); - } -} - - -void VirtDetails::closeData() -{ - done(0); -} diff --git a/utils/rdhpiinfo/virtdetails.h b/utils/rdhpiinfo/virtdetails.h deleted file mode 100644 index 8082d419..00000000 --- a/utils/rdhpiinfo/virtdetails.h +++ /dev/null @@ -1,66 +0,0 @@ -// virtdetails.h -// -// Show profiling data for an AudioScience adapter -// -// (C) Copyright 2014 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 -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public -// License along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -// - -#ifndef VIRTDETAILS_H -#define VIRTDETAILS_H - -#include - -#include -#include -#include -#include - -#include - -class VirtDetails : public QDialog -{ - Q_OBJECT - public: - VirtDetails(uint16_t card,hpi_handle_t profile,uint16_t profile_quan, - QWidget *parent=0); - QSize sizeHint() const; - QSizePolicy sizePolicy() const; - -private slots: - void updateProfileData(); - void closeData(); - - private: - uint16_t virt_card; - hpi_handle_t virt_profile; - QLabel *virt_utilization_label; - QLineEdit *virt_utilization_edit; - QLabel *virt_profile_label; - QComboBox *virt_profile_box; - QLabel *virt_interval_label; - QLineEdit *virt_interval_edit; - QLabel *virt_total_ticks_label; - QLineEdit *virt_total_ticks_edit; - QLabel *virt_call_count_label; - QLineEdit *virt_call_count_edit; - QLabel *virt_max_ticks_label; - QLineEdit *virt_max_ticks_edit; - QLabel *virt_ticks_per_ms_label; - QLineEdit *virt_ticks_per_ms_edit; -}; - - -#endif // VIRTDETAILS_H diff --git a/xdg/Makefile.am b/xdg/Makefile.am index 990c4bf1..03e1f1a4 100644 --- a/xdg/Makefile.am +++ b/xdg/Makefile.am @@ -31,7 +31,6 @@ install-exec-am: cp rivendell-rddgimport.desktop $(DESTDIR)@prefix@/share/applications/ cp rivendell-rddiscimport.desktop $(DESTDIR)@prefix@/share/applications/ cp rivendell-rdgpimon.desktop $(DESTDIR)@prefix@/share/applications/ - if test -f ../rdhpi/.libs/librdhpi-@VERSION@.so ; then cp rivendell-rdhpiinfo-root.desktop $(DESTDIR)@prefix@/share/applications/ ; fi cp rivendell-rdlibrary.desktop $(DESTDIR)@prefix@/share/applications/ cp rivendell-rdlogedit.desktop $(DESTDIR)@prefix@/share/applications/ cp rivendell-rdlogin.desktop $(DESTDIR)@prefix@/share/applications/ @@ -48,30 +47,21 @@ install-exec-am: cp *.menu $(DESTDIR)/etc/xdg/menus/applications-merged/ mkdir -p $(DESTDIR)/etc/pam.d cp rdalsaconfig-root-pam $(DESTDIR)/etc/pam.d/rdalsaconfig-root - if test -f ../rdhpi/.libs/librdhpi-@VERSION@.so ; then cp rdhpiinfo-root-pam $(DESTDIR)/etc/pam.d/rdhpiinfo-root ; fi mkdir -p $(DESTDIR)/etc/security/console.apps cp rdalsaconfig-root-consolehelper $(DESTDIR)/etc/security/console.apps/rdalsaconfig-root - if test -f ../rdhpi/.libs/librdhpi-@VERSION@.so ; then cp rdhpiinfo-root-consolehelper $(DESTDIR)/etc/security/console.apps/rdhpiinfo-root ; fi rm -f $(DESTDIR)$(prefix)/bin/rdalsaconfig-root ln -s /usr/bin/consolehelper $(DESTDIR)$(prefix)/bin/rdalsaconfig-root - rm -f $(DESTDIR)$(prefix)/bin/rdhpiinfo-root - if test -f ../rdhpi/.libs/librdhpi-@VERSION@.so ; then ln -s /usr/bin/consolehelper $(DESTDIR)$(prefix)/bin/rdhpiinfo-root ; fi uninstall-local: rm -f $(DESTDIR)@prefix@/share/applications/rivendell-*.desktop rm -f $(DESTDIR)@prefix@/share/desktop-directories/rivendell-*.directory rm -f $(DESTDIR)/etc/xdg/menus/applications-merged/rivendell-*.menu rm -f $(DESTDIR)/etc/pam.d/rdalsaconfig-root - rm -f $(DESTDIR)/etc/pam.d/rdhpiinfo-root rm -f $(DESTDIR)/etc/security/console.apps/rdalsaconfig-root - rm -f $(DESTDIR)/etc/security/console.apps/rdhpiinfo-root rm -f $(DESTDIR)$(prefix)/bin/rdalsaconfig-root - rm -f $(DESTIDR)$(prefix)/bin/rdhpiinfo-root EXTRA_DIST = rdalsaconfig-root-consolehelper\ rdalsaconfig-root-pam\ - rdhpiinfo-root-consolehelper\ - rdhpiinfo-root-pam\ rivendell-configuration.directory\ rivendell-documentation.directory\ rivendell-logtools.directory\ @@ -87,8 +77,6 @@ EXTRA_DIST = rdalsaconfig-root-consolehelper\ rivendell-rddgimport.desktop\ rivendell-rddiscimport.desktop\ rivendell-rdgpimon.desktop\ - rivendell-rdhpiinfo.desktop\ - rivendell-rdhpiinfo-root.desktop\ rivendell-rdlibrary.desktop\ rivendell-rdlogedit.desktop\ rivendell-rdlogin.desktop\ diff --git a/xdg/rdhpiinfo-root-consolehelper b/xdg/rdhpiinfo-root-consolehelper deleted file mode 100644 index ff490ec1..00000000 --- a/xdg/rdhpiinfo-root-consolehelper +++ /dev/null @@ -1,3 +0,0 @@ -USER=root -PROGRAM=/usr/bin/rdhpiinfo -SESSION=true diff --git a/xdg/rdhpiinfo-root-pam b/xdg/rdhpiinfo-root-pam deleted file mode 100644 index b95f5243..00000000 --- a/xdg/rdhpiinfo-root-pam +++ /dev/null @@ -1,4 +0,0 @@ -#%PAM-1.0 -auth include config-util -account include config-util -session include config-util diff --git a/xdg/rivendell-rdhpiinfo-root.desktop b/xdg/rivendell-rdhpiinfo-root.desktop deleted file mode 100644 index 117e8716..00000000 --- a/xdg/rivendell-rdhpiinfo-root.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Terminal=false -Categories=Qt;KDE;Rivendell; -Name=RDHPIInfo -GenericName=AudioScience Card Information -Exec=rdhpiinfo-root -Icon=rivendell -Type=Application -Terminal=false diff --git a/xdg/rivendell-rdhpiinfo.desktop b/xdg/rivendell-rdhpiinfo.desktop deleted file mode 100644 index 34d9a00f..00000000 --- a/xdg/rivendell-rdhpiinfo.desktop +++ /dev/null @@ -1,12 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Terminal=false -Categories=Qt;KDE;Rivendell; -Name=RDHPIInfo -GenericName=AudioScience Card Information -Exec=rdhpiinfo -Icon=rivendell -Type=Application -Terminal=false -X-KDE-SubstituteUID=true -X-KDE-Username=root