summaryrefslogtreecommitdiffstats
path: root/kmix/mixer_alsa.h
blob: 0d73dc774783fa52aca7790eef75d3fd05f21acb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef MIXER_ALSA_H
#define MIXER_ALSA_H

// QT includes
#include <qvaluelist.h>

// Forward QT includes
class QString;
class QSocketNotifier;

#include "mixer_backend.h"

class Mixer_ALSA : public Mixer_Backend
{
	public:
		Mixer_ALSA( int device = -1 );
		~Mixer_ALSA();

		virtual int  readVolumeFromHW( int devnum, Volume &vol );
		virtual int  writeVolumeToHW( int devnum, Volume &vol );
		virtual bool setRecsrcHW( int devnum, bool on);
		virtual bool isRecsrcHW( int devnum );
	        virtual void setEnumIdHW(int mixerIdx, unsigned int);
      		virtual unsigned int enumIdHW(int mixerIdx);
		virtual bool prepareUpdateFromHW();
                virtual bool needsPolling() { return false; }
                virtual void prepareSignalling( Mixer *mixer );

	protected:
		virtual int open();
		virtual int close();

	private:
		int identify( snd_mixer_selem_id_t *sid );
		snd_mixer_elem_t* getMixerElem(int devnum);
		void removeSignalling();

		virtual QString errorText(int mixer_error);
		typedef QValueList<snd_mixer_selem_id_t *>AlsaMixerSidList;
		AlsaMixerSidList mixer_sid_list;
		typedef QValueList<snd_mixer_elem_t *> AlsaMixerElemList; // !! remove
		AlsaMixerElemList mixer_elem_list; // !! remove

                bool _initialUpdate;
		snd_mixer_t *_handle;
		QString devName;
	        struct pollfd  *m_fds;
                QSocketNotifier **m_sns;
		int m_count;

};

class ALSA_DevIterator : public DevIterator
{
	public:
		ALSA_DevIterator();
		virtual void next();
};

#endif