1 #include <lib/base/eerror.h>
2 #include <lib/dvb/volume.h>
8 #define VIDEO_DEV "/dev/dvb/adapter0/video0"
9 #define AUDIO_DEV "/dev/dvb/adapter0/audio0"
10 #include <linux/dvb/audio.h>
11 #include <linux/dvb/video.h>
13 eDVBVolumecontrol* eDVBVolumecontrol::instance = NULL;
15 eDVBVolumecontrol* eDVBVolumecontrol::getInstance()
18 instance = new eDVBVolumecontrol;
22 eDVBVolumecontrol::eDVBVolumecontrol()
28 int eDVBVolumecontrol::openMixer()
30 return open( AUDIO_DEV, O_RDWR );
33 void eDVBVolumecontrol::closeMixer(int fd)
38 void eDVBVolumecontrol::volumeUp(int left, int right)
40 setVolume(leftVol + left, rightVol + right);
43 void eDVBVolumecontrol::volumeDown(int left, int right)
45 setVolume(leftVol - left, rightVol - right);
48 int eDVBVolumecontrol::checkVolume(int vol)
57 void eDVBVolumecontrol::setVolume(int left, int right)
59 /* left, right is 0..100 */
60 leftVol = checkVolume(left);
61 rightVol = checkVolume(right);
63 /* convert to -1dB steps */
64 left = 63 - leftVol * 63 / 100;
65 right = 63 - rightVol * 63 / 100;
66 /* now range is 63..0, where 0 is loudest */
70 mixer.volume_left = left;
71 mixer.volume_right = right;
73 eDebug("Setvolume: %d %d (raw)", leftVol, rightVol);
74 eDebug("Setvolume: %d %d (-1db)", left, right);
79 ioctl(fd, AUDIO_SET_MIXER, &mixer);
86 if((f = fopen("/proc/stb/avs/0/volume", "wb")) == NULL) {
87 eDebug("cannot open /proc/stb/avs/0/volume(%m)");
91 fprintf(f, "%d", left); /* in -1dB */
96 int eDVBVolumecontrol::getVolume()
101 bool eDVBVolumecontrol::isMuted()
107 void eDVBVolumecontrol::volumeMute()
109 int fd = openMixer();
110 ioctl(fd, AUDIO_SET_MUTE, true);
116 if((f = fopen("/proc/stb/audio/j1_mute", "wb")) == NULL) {
117 eDebug("cannot open /proc/stb/audio/j1_mute(%m)");
126 void eDVBVolumecontrol::volumeUnMute()
128 int fd = openMixer();
129 ioctl(fd, AUDIO_SET_MUTE, false);
135 if((f = fopen("/proc/stb/audio/j1_mute", "wb")) == NULL) {
136 eDebug("cannot open /proc/stb/audio/j1_mute(%m)");
145 void eDVBVolumecontrol::volumeToggleMute()