summaryrefslogtreecommitdiffstats
path: root/kmix/mixer_backend.h
diff options
context:
space:
mode:
Diffstat (limited to 'kmix/mixer_backend.h')
-rw-r--r--kmix/mixer_backend.h104
1 files changed, 104 insertions, 0 deletions
diff --git a/kmix/mixer_backend.h b/kmix/mixer_backend.h
new file mode 100644
index 00000000..8132ea04
--- /dev/null
+++ b/kmix/mixer_backend.h
@@ -0,0 +1,104 @@
+//-*-C++-*-
+/*
+ * KMix -- KDE's full featured mini mixer
+ *
+ *
+ * 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.
+ */
+
+#ifndef MIXER_BACKEND_H
+#define MIXER_BACKEND_H
+
+#include "mixer.h"
+
+class Mixer_Backend
+{
+// The Mixer Backend's may only be accessed from the Mixer class.
+friend class Mixer;
+
+protected:
+ Mixer_Backend(int devnum);
+ virtual ~Mixer_Backend();
+
+ /// Derived classes MUST implement this to open the mixer. Returns a KMix error code (O=OK).
+ virtual int open() = 0;
+ virtual int close() = 0;
+
+ /** Returns, whether this Mixer object contains a valid Mixer. You should return "false", when
+ * the Mixer with the devnum given in the constructor is not supported by the Backend. The two
+ * typical cases are:
+ * (1) No such hardware installed
+ * (2) The hardware exists, but has no mixer support (e.g. external soundcard with only mechanical volume knobs)
+ * The default implementation calls open(), checks the return code and whether the number of
+ * supported channels is > 0. Then it calls close().
+ * You should reimplement this method in your backend, when there is a less time-consuming method than
+ * calling open() and close() for checking the existance of a Mixer.
+ */
+ virtual bool isValid();
+
+ /** @return true, if the Mixer is open (and thus can be operated) */
+ bool isOpen();
+
+ virtual bool prepareUpdateFromHW();
+
+ /// Volume Read
+ virtual int readVolumeFromHW( int devnum, Volume &vol ) = 0;
+ /// Volume Write
+ virtual int writeVolumeToHW( int devnum, Volume &volume ) = 0;
+
+ /// Enums
+ virtual void setEnumIdHW(int mixerIdx, unsigned int);
+ virtual unsigned int enumIdHW(int mixerIdx);
+
+ /// Recording Switches
+ virtual bool setRecsrcHW( int devnum, bool on) = 0;
+ virtual bool isRecsrcHW( int devnum ) = 0;
+
+ /// Overwrite in the backend if the backend can see changes without polling
+ virtual bool needsPolling() { return true; }
+
+ /** overwrite this if you need to connect to slots in the mixer (e.g. readSetFromHW)
+ this called in the very beginning and only if !needsPolling
+ */
+ virtual void prepareSignalling( Mixer * ) {}
+
+ MixDevice* recommendedMaster();
+
+ /** Return a translated error text for the given error number.
+ * Subclasses can override this method to produce platform
+ * specific error descriptions.
+ */
+ virtual QString errorText(int mixer_error);
+ /// Prints out a translated error text for the given error number on stderr
+ void errormsg(int mixer_error);
+
+
+ int m_devnum;
+ /// User friendly name of the Mixer (e.g. "IRIX Audio Mixer"). If your mixer API
+ /// gives you a usable name, use that name.
+ QString m_mixerName;
+ // All mix devices of this phyisical device.
+ MixSet m_mixDevices;
+
+ /******************************************************************************************
+ * Please don't access the next vars from the Mixer class (even though Mixer is a friend).
+ * There are proper accesor methods for them.
+ ******************************************************************************************/
+ bool m_isOpen;
+ // The MixDevice that would qualify best as MasterDevice (according to the taste of the Backend developer)
+ MixDevice* m_recommendedMaster;
+};
+
+#endif