summaryrefslogtreecommitdiffstats
path: root/kmix/mixer_hpux.cpp
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commite2de64d6f1beb9e492daf5b886e19933c1fa41dd (patch)
tree9047cf9e6b5c43878d5bf82660adae77ceee097a /kmix/mixer_hpux.cpp
downloadtdemultimedia-e2de64d6f1beb9e492daf5b886e19933c1fa41dd.tar.gz
tdemultimedia-e2de64d6f1beb9e492daf5b886e19933c1fa41dd.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdemultimedia@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kmix/mixer_hpux.cpp')
-rw-r--r--kmix/mixer_hpux.cpp257
1 files changed, 257 insertions, 0 deletions
diff --git a/kmix/mixer_hpux.cpp b/kmix/mixer_hpux.cpp
new file mode 100644
index 00000000..e7ca0a83
--- /dev/null
+++ b/kmix/mixer_hpux.cpp
@@ -0,0 +1,257 @@
+/*
+ * KMix -- KDE's full featured mini mixer
+ *
+ *
+ * Copyright (C) 1996-2000 Christian Esken
+ * esken@kde.org
+ *
+ * HP/UX-Port: Copyright (C) 1999 by Helge Deller
+ * deller@gmx.de
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "mixer_hpux.h"
+
+#warning "HP/UX mixer (maybe) doesn't work yet !"
+
+#define HPUX_ERROR_OFFSET 1024
+
+#define myGain AUnityGain /* AUnityGain or AZeroGain */
+
+#define GAIN_OUT_DIFF ((long) ((int)aMaxOutputGain(audio) - (int)aMinOutputGain(audio)))
+#define GAIN_OUT_MIN ((long) aMinOutputGain(audio))
+#define GAIN_IN_DIFF ((long) ((int)aMaxInputGain(audio) - (int)aMinInputGain(audio)))
+#define GAIN_IN_MIN ((long) aMinOutputGain(audio))
+
+/* standard */
+#define ID_PCM 4
+
+/* AInputSrcType: */ /*OSS:*/
+#define ID_IN_MICROPHONE 7 /* AISTMonoMicrophone */
+#define ID_IN_AUX 6 /* AISTLeftAuxiliary, AISTRightAuxiliary */
+
+/* AOutputDstType: */
+#define ID_OUT_INT_SPEAKER 0 /* AODTMonoIntSpeaker */
+
+/* not yet implemented:
+ AODTLeftJack, AODTRightJack,
+ AODTLeftLineOut, AODTRightLineOut,
+ AODTLeftHeadphone, AODTRightHeadphone
+
+const char* MixerDevNames[32]={"Volume" , "Bass" , "Treble" , "Synth" , "Pcm" , \
+ "Speaker" , "Line" , "Microphone", "CD" , "Mix" , \
+ "Pcm2" , "RecMon" , "IGain" , "OGain" , "Line1", \
+ "Line2" , "Line3" , "Digital1" , "Digital2", "Digital3", \
+ "PhoneIn" , "PhoneOut", "Video" , "Radio" , "Monitor", \
+ "3D-depth", "3D-center", "unknown" , "unknown" , "unknown", \
+ "unknown" , "unused" };
+*/
+
+
+
+Mixer_HPUX::Mixer_HPUX(int devnum) : Mixer_Backend(devnum)
+{
+ char ServerName[10];
+ ServerName[0] = 0;
+ audio = AOpenAudio(ServerName,NULL);
+}
+
+Mixer_HPUX::~Mixer_HPUX()
+{
+ if (audio) {
+ ACloseAudio(audio,0);
+ audio = 0;
+ }
+}
+
+
+int Mixer_HPUX::open()
+{
+ if (audio==0) {
+ return Mixer::ERR_OPEN;
+ }
+ else
+ {
+ /* Mixer is open. Now define properties */
+ stereodevs = devmask = (1<<ID_PCM); /* activate pcm */
+ recmask = 0;
+
+ /* check Input devices... */
+ if (AInputSources(audio) & AMonoMicrophoneMask) {
+ devmask |= (1<<ID_IN_MICROPHONE);
+ recmask |= (1<<ID_IN_MICROPHONE);
+ }
+ if (AInputSources(audio) & (ALeftAuxiliaryMask|ARightAuxiliaryMask)) {
+ devmask |= (1<<ID_IN_AUX);
+ recmask |= (1<<ID_IN_AUX);
+ stereodevs |= (1<<ID_IN_AUX);
+ }
+
+ /* check Output devices... */
+ if (AOutputDestinations(audio) & AMonoIntSpeakerMask) {
+ devmask |= (1<<ID_OUT_INT_SPEAKER);
+ stereodevs |= (1<<ID_OUT_INT_SPEAKER);
+ }
+
+/* implement later:
+ ----------------
+ if (AOutputDestinations(audio) & AMonoLineOutMask) devmask |= 64; // Line
+ if (AOutputDestinations(audio) & AMonoJackMask) devmask |= (1<<14); // Line1
+ if (AOutputDestinations(audio) & AMonoHeadphoneMask) devmask |= (1<<15); // Line2
+*/
+
+ MaxVolume = 255;
+
+ long error = 0;
+ ASetSystemPlayGain(audio, myGain, &error);
+ if (error) errorText(error + HPUX_ERROR_OFFSET);
+ ASetSystemRecordGain(audio, myGain, &error);
+ if (error) errorText(error + HPUX_ERROR_OFFSET);
+
+ i_recsrc = 0;
+ m_isOpen = true;
+
+ m_mixerName = "HP Mixer"; /* AAudioString(audio); */
+ return 0;
+ }
+}
+
+int Mixer_HPUX::close()
+{
+ m_isOpen = false;
+ m_mixDevices.clear();
+ return 0;
+}
+
+
+/*
+void Mixer_HPUX::setDevNumName_I(int devnum)
+{
+ devname = "HP Mixer";
+}
+*/
+bool Mixer_HPUX::setRecsrcHW( int devnum, bool on )
+{
+ return FALSE;
+}
+
+bool Mixer_HPUX::isRecsrcHW( int devnum )
+{
+ return FALSE;
+}
+
+int Mixer_HPUX::readVolumeFromHW( int devnum, Volume &vol )
+{
+ long Gain;
+ long error = 0;
+ int vl,vr;
+
+ switch (devnum) {
+ case ID_OUT_INT_SPEAKER: /* AODTMonoIntSpeaker */
+ AGetSystemChannelGain(audio, ASGTPlay, ACTMono, &Gain, &error );
+ vl = vr = (Gain-GAIN_OUT_MIN)*255 / GAIN_OUT_DIFF;
+ vol.setVolume( Volume::LEFT, vl);
+ vol.setVolume( Volume::RIGHT, vr);
+printf("READ - Devnum: %d, Left: %d, Right: %d\n", devnum, vl, vr );
+ break;
+
+ case ID_IN_AUX: /* AISTLeftAuxiliary, AISTRightAuxiliary */
+ case ID_IN_MICROPHONE: /* AISTMonoMicrophone */
+ AGetSystemChannelGain(audio, ASGTRecord, ACTMono, &Gain, &error );
+ vl = vr = (Gain-GAIN_IN_MIN)*255 / GAIN_IN_DIFF;
+ vol.setVolume( Volume::LEFT, vl);
+ vol.setVolume( Volume::RIGHT, vr);
+ break;
+
+ default:
+ error = Mixer::ERR_NODEV - HPUX_ERROR_OFFSET;
+ break;
+ };
+
+ return (error ? (error+HPUX_ERROR_OFFSET) : 0);
+}
+
+/*
+ ASystemGainType = ASGTPlay, ASGTRecord, ASGTMonitor
+ AChType = ACTMono, ACTLeft, ACTRight
+*/
+
+int Mixer_HPUX::writeVolumeToHW( int devnum, Volume& vol )
+{
+ long Gain;
+ long error = 0;
+ int vl = vol.getVolume(Volume::LEFT);
+ int vr = vol.getVolume(Volume::RIGHT);
+
+ switch (devnum) {
+ case ID_OUT_INT_SPEAKER: /* AODTMonoIntSpeaker */
+printf("WRITE - Devnum: %d, Left: %d, Right: %d\n", devnum, vl, vr);
+ Gain = vl; // only left Volume
+ Gain = (Gain*GAIN_OUT_DIFF) / 255 - GAIN_OUT_MIN;
+ ASetSystemChannelGain(audio, ASGTPlay, ACTMono, (AGainDB) Gain, &error );
+ break;
+
+ case ID_IN_MICROPHONE: /* AISTMonoMicrophone */
+ Gain = vl; // only left Volume
+ Gain = (Gain*GAIN_IN_DIFF) / 255 - GAIN_IN_MIN;
+ ASetSystemChannelGain(audio, ASGTRecord, ACTMono, (AGainDB) Gain, &error );
+ break;
+
+ case ID_IN_AUX: /* AISTLeftAuxiliary, AISTRightAuxiliary */
+ Gain = (vl*GAIN_IN_DIFF) / 255 - GAIN_IN_MIN;
+ ASetSystemChannelGain(audio, ASGTRecord, ACTLeft, (AGainDB) Gain, &error );
+ Gain = (vr*GAIN_IN_DIFF) / 255 - GAIN_IN_MIN;
+ ASetSystemChannelGain(audio, ASGTRecord, ACTRight, (AGainDB) Gain, &error );
+ break;
+
+ default:
+ error = Mixer::ERR_NODEV - HPUX_ERROR_OFFSET;
+ break;
+ };
+ return (error ? (error+HPUX_ERROR_OFFSET) : 0);
+}
+
+
+QString Mixer_HPUX::errorText(int mixer_error)
+{
+ QString l_s_errmsg;
+ if (mixer_error >= HPUX_ERROR_OFFSET) {
+ char errorstr[200];
+ AGetErrorText(audio, (AError) (mixer_error-HPUX_ERROR_OFFSET),
+ errorstr, sizeof(errorstr));
+ printf("kmix: %s: %s\n",mixerName().data(), errorstr);
+ l_s_errmsg = errorstr;
+ } else
+ switch (mixer_error)
+ {
+ case Mixer::ERR_OPEN:
+ // should use i18n...
+ l_s_errmsg = "kmix: HP-UX Alib-Mixer cannot be found.\n" \
+ "Please check that you have:\n" \
+ " 1. Installed the libAlib package and\n" \
+ " 2. started the Aserver program from the /opt/audio/bin directory\n";
+ break;
+ default:
+ l_s_errmsg = Mixer_Backend::errorText(mixer_error);
+ break;
+ }
+ return l_s_errmsg;
+}
+
+QString HPUX_getDriverName() {
+ return "HPUX";
+}
+