diff options
Diffstat (limited to 'tderadio3/plugins/v4lradio/v4lradio.h')
-rw-r--r-- | tderadio3/plugins/v4lradio/v4lradio.h | 266 |
1 files changed, 266 insertions, 0 deletions
diff --git a/tderadio3/plugins/v4lradio/v4lradio.h b/tderadio3/plugins/v4lradio/v4lradio.h new file mode 100644 index 0000000..c8d7a58 --- /dev/null +++ b/tderadio3/plugins/v4lradio/v4lradio.h @@ -0,0 +1,266 @@ +/*************************************************************************** + v4lradio.h - description + ------------------- + begin : Jan 2002 + copyright : (C) 2002-2005 Ernst Martin Witte, Klas Kalass + email : [email protected], [email protected] + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef KRADIO_V4LRADIO_H +#define KRADIO_V4LRADIO_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <tqtimer.h> + +#include "../../src/include/radiodevice_interfaces.h" +#include "../../src/include/plugins.h" +#include "../../src/include/frequencyradiostation.h" +#include "../../src/include/frequencyseekhelper.h" +#include "../../src/include/soundstreamclient_interfaces.h" +#include "v4lcfg_interfaces.h" + + +struct video_tuner; +struct video_audio; +#ifdef HAVE_V4L2 +struct v4l2_tuner; +#endif + +class V4LRadio : public TQObject, + public PluginBase, + public IRadioDevice, +// public IRadioSound, + public ISeekRadio, + public IFrequencyRadio, + public ISoundStreamClient, + public IV4LCfg +{ +Q_OBJECT + +public: + V4LRadio (const TQString &name); + virtual ~V4LRadio (); + + virtual bool connectI (Interface *); + virtual bool disconnectI (Interface *); + + virtual TQString pluginClassName() const { return "V4LRadio"; } + + virtual const TQString &name() const { return PluginBase::name(); } + virtual TQString &name() { return PluginBase::name(); } + + // PluginBase + +public: + virtual void saveState (TDEConfig *) const; + virtual void restoreState (TDEConfig *); + virtual void startPlugin(); + + virtual ConfigPageInfo createConfigurationPage(); + virtual AboutPageInfo createAboutPage(); + + // IRadioDevice methods + +RECEIVERS: + virtual bool setPower(bool p); + virtual bool powerOn(); + virtual bool powerOff(); + virtual bool activateStation(const RadioStation &rs); + +ANSWERS: + virtual bool isPowerOn() const; + virtual bool isPowerOff() const; + virtual SoundStreamID getSoundStreamID() const; + virtual const RadioStation & getCurrentStation() const; + virtual const TQString & getDescription() const; + virtual SoundStreamID getCurrentSoundStreamID() const; + + + // ISeekRadio + +RECEIVERS: + virtual bool toBeginning(); + virtual bool toEnd(); + virtual bool startSeek (bool up); + virtual bool startSeekUp(); + virtual bool startSeekDown(); + virtual bool stopSeek(); + +ANSWERS: + virtual bool isSeekRunning() const; + virtual bool isSeekUpRunning() const; + virtual bool isSeekDownRunning() const; + virtual float getProgress () const; + + + // IFrequencyRadio + +RECEIVERS: + virtual bool setFrequency(float f); + virtual bool setMinFrequency(float mf); + virtual bool setMaxFrequency(float mf); + virtual bool setScanStep(float s); + +ANSWERS: + virtual float getFrequency() const; + virtual float getMinFrequency() const; + virtual float getMinDeviceFrequency() const; + virtual float getMaxFrequency() const; + virtual float getMaxDeviceFrequency() const; + virtual float getScanStep() const; + + + // ISoundStreamClient: mixer functions + + +RECEIVERS: + void noticeConnectedI (ISoundStreamServer *s, bool pointer_valid); + void noticeConnectedSoundClient(ISoundStreamClient::thisInterface *i, bool pointer_valid); + + bool setTreble (SoundStreamID, float v); + bool setBass (SoundStreamID, float v); + bool setBalance (SoundStreamID, float v); + bool mute (SoundStreamID, bool mute = true); + bool unmute (SoundStreamID, bool unmute = true); + bool setSignalMinQuality(SoundStreamID, float q); + bool setStereo(SoundStreamID, bool s); + + bool getTreble(SoundStreamID, float &v) const; + bool getBass (SoundStreamID, float &v) const; + bool getBalance (SoundStreamID, float &b) const; + bool getSignalQuality(SoundStreamID, float &q) const; + bool getSignalMinQuality(SoundStreamID, float &q) const; + bool hasGoodQuality(SoundStreamID, bool &) const; + bool isStereo(SoundStreamID, bool &s) const; + bool isMuted(SoundStreamID, bool &m) const; + + // ISoundStreamClient: generic stream handling (broadcasts) + +RECEIVERS: + + bool getSoundStreamDescription(SoundStreamID id, TQString &descr) const; + bool getSoundStreamRadioStation(SoundStreamID id, const RadioStation *&rs) const; + bool enumerateSoundStreams(TQMap<TQString, SoundStreamID> &list) const; + +// bool stopCapture(SoundStreamID id); // if active playback also call stopPlayback + + + // IV4LCfg +RECEIVERS: + bool setRadioDevice (const TQString &s); + bool setPlaybackMixer(const TQString &soundStreamClientID, const TQString &ch); + bool setCaptureMixer (const TQString &soundStreamClientID, const TQString &ch); + bool setDeviceVolume (float v); + bool setActivePlayback(bool a); + bool setMuteOnPowerOff(bool a); + bool setVolumeZeroOnPowerOff(bool a); + + // if the radio is powered off, we will handle the volume by changing m_defaultPlaybackVolume + bool setPlaybackVolume(SoundStreamID id, float volume); + bool getPlaybackVolume(SoundStreamID id, float &volume) const; + +ANSWERS: + const TQString &getRadioDevice () const { return m_radioDev; } + const TQString &getPlaybackMixerID () const { return m_PlaybackMixerID; } + const TQString &getCaptureMixerID () const { return m_CaptureMixerID; } + const TQString &getPlaybackMixerChannel() const { return m_PlaybackMixerChannel; } + const TQString &getCaptureMixerChannel () const { return m_CaptureMixerChannel; } + float getDeviceVolume () const; + V4LCaps getCapabilities(TQString dev = TQString()) const; + + bool getActivePlayback() const { return m_ActivePlayback; } + bool getMuteOnPowerOff() const { return m_MuteOnPowerOff; } + bool getVolumeZeroOnPowerOff() const { return m_VolumeZeroOnPowerOff; } + + // anything else + +protected slots: + void poll(); + +protected: + V4LCaps readV4LCaps(const TQString &device) const; + void radio_init(); + void radio_done(); + + bool readTunerInfo() const; + bool updateAudioInfo(bool write) const; + bool readAudioInfo() const { return updateAudioInfo(false); } + bool writeAudioInfo() const { return updateAudioInfo(true); } + + void searchMixers(ISoundStreamClient **playback_mixer, ISoundStreamClient **capture_mixer); + +protected: + + FrequencyRadioStation m_currentStation; + mutable float m_treble; + mutable float m_bass; + mutable float m_balance; + mutable float m_deviceVolume; + mutable bool m_muted; + mutable float m_signalQuality; + mutable bool m_stereo; + + float m_minQuality; + float m_minFrequency; + float m_maxFrequency; + mutable float m_lastMinDevFrequency; + mutable float m_lastMaxDevFrequency; + + float m_defaultPlaybackVolume; + + FrequencySeekHelper *m_seekHelper; + float m_scanStep; + + V4LCaps m_caps; + TQString m_radioDev; + int m_radio_fd; + + mutable bool m_useOldV4L2Calls; + + + mutable struct video_audio *m_audio; + mutable struct video_tuner *m_tuner; +#ifdef HAVE_V4L2 + mutable struct v4l2_tuner *m_tuner2; +#endif + + TQTimer m_pollTimer; + + struct TunerCache { + bool valid; + float deltaF; + float minF, maxF; + TunerCache() { valid = false; deltaF = minF = maxF = 0; } + }; + mutable struct TunerCache m_tunercache; + + + mutable bool m_blockReadTuner, + m_blockReadAudio; + + SoundStreamID m_SoundStreamID; + TQString m_PlaybackMixerID; + TQString m_CaptureMixerID; + TQString m_PlaybackMixerChannel; + TQString m_CaptureMixerChannel; + + bool m_ActivePlayback; + bool m_MuteOnPowerOff; + bool m_VolumeZeroOnPowerOff; + + bool m_restorePowerOn; +}; + +#endif |