BDA - additional DVB-S parameters added
authorKen Self <kenself@videolan.org>
Wed, 16 May 2007 22:00:59 +0000 (22:00 +0000)
committerKen Self <kenself@videolan.org>
Wed, 16 May 2007 22:00:59 +0000 (22:00 +0000)
modules/access/bda/bda.c
modules/access/bda/bdadefs.h
modules/access/bda/bdagraph.cpp

index 31f375d..680dc95 100644 (file)
@@ -88,13 +88,14 @@ static int Control( access_t *, int, va_list );
 #define SRATE_LONGTEXT ""
 
 #define LNB_LOF1_TEXT N_("Antenna lnb_lof1 (kHz)")
-#define LNB_LOF1_LONGTEXT ""
+#define LNB_LOF1_LONGTEXT N_("Low Band Local Osc Freq in kHz usually 9.75GHz")
 
 #define LNB_LOF2_TEXT N_("Antenna lnb_lof2 (kHz)")
-#define LNB_LOF2_LONGTEXT ""
+#define LNB_LOF2_LONGTEXT N_("High Band Local Osc Freq in kHz usually 10.6GHz")
 
 #define LNB_SLOF_TEXT N_("Antenna lnb_slof (kHz)")
-#define LNB_SLOF_LONGTEXT ""
+#define LNB_SLOF_LONGTEXT N_( \
+    "Low Noise Block switch freq in kHz usually 11.7GHz")
 
 /* Cable */
 #define MODULATION_TEXT N_("Modulation type")
@@ -166,13 +167,13 @@ vlc_module_begin();
     /* DVB-S (satellite) */
 #   if defined(WIN32) || defined(WINCE)
         add_integer( "dvb-azimuth", 0, NULL, AZIMUTH_TEXT, AZIMUTH_LONGTEXT,
-            VLC_FALSE );
+            VLC_TRUE );
         add_integer( "dvb-elevation", 0, NULL, ELEVATION_TEXT,
-            ELEVATION_LONGTEXT, VLC_FALSE );
+            ELEVATION_LONGTEXT, VLC_TRUE );
         add_integer( "dvb-longitude", 0, NULL, LONGITUDE_TEXT,
-            LONGITUDE_LONGTEXT, VLC_FALSE );
+            LONGITUDE_LONGTEXT, VLC_TRUE );
         add_string( "dvb-polarisation", NULL, NULL, POLARISATION_TEXT,
-            POLARISATION_LONGTEXT, VLC_FALSE );
+            POLARISATION_LONGTEXT, VLC_TRUE );
             change_string_list( ppsz_polar_list, ppsz_polar_text, 0 );
             /* Note: Polaristion H = voltage 18; V = voltage 13; */
 #   else
@@ -184,13 +185,14 @@ vlc_module_begin();
             HIGH_VOLTAGE_LONGTEXT, VLC_TRUE );
         add_integer( "dvb-tone", -1, NULL, TONE_TEXT, TONE_LONGTEXT,
             VLC_TRUE );
-        add_integer( "dvb-lnb-lof1", 0, NULL, LNB_LOF1_TEXT,
-            LNB_LOF1_LONGTEXT, VLC_TRUE );
-        add_integer( "dvb-lnb-lof2", 0, NULL, LNB_LOF2_TEXT,
-            LNB_LOF2_LONGTEXT, VLC_TRUE );
-        add_integer( "dvb-lnb-slof", 0, NULL, LNB_SLOF_TEXT,
-            LNB_SLOF_LONGTEXT, VLC_TRUE );
 #   endif
+    add_integer( "dvb-lnb-lof1", 0, NULL, LNB_LOF1_TEXT,
+        LNB_LOF1_LONGTEXT, VLC_TRUE );
+    add_integer( "dvb-lnb-lof2", 0, NULL, LNB_LOF2_TEXT,
+        LNB_LOF2_LONGTEXT, VLC_TRUE );
+    add_integer( "dvb-lnb-slof", 0, NULL, LNB_SLOF_TEXT,
+        LNB_SLOF_LONGTEXT, VLC_TRUE );
+
     add_integer( "dvb-fec", 9, NULL, FEC_TEXT, FEC_LONGTEXT, VLC_TRUE );
     add_integer( "dvb-srate", 27500000, NULL, SRATE_TEXT, SRATE_LONGTEXT,
         VLC_FALSE );
@@ -242,14 +244,15 @@ static int Open( vlc_object_t *p_this )
     access_t     *p_access = (access_t*)p_this;
     access_sys_t *p_sys;
     const char* psz_module  = "dvb";
-    const int   i_param_count = 9;
+    const int   i_param_count = 12;
     const char* psz_param[] = { "frequency", "bandwidth",
         "srate", "azimuth", "elevation", "longitude", "polarisation",
-        "modulation", "caching" };
+        "modulation", "caching", "lnb-lof1", "lnb-lof2", "lnb-slof" };
 
     const int   i_type[] = { VLC_VAR_INTEGER, VLC_VAR_INTEGER,
         VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER,
-        VLC_VAR_STRING, VLC_VAR_INTEGER, VLC_VAR_INTEGER };
+        VLC_VAR_STRING, VLC_VAR_INTEGER, VLC_VAR_INTEGER, VLC_VAR_INTEGER,
+        VLC_VAR_INTEGER, VLC_VAR_INTEGER };
 
     char  psz_full_name[128];
     int i_ret;
index effa951..3d96329 100644 (file)
@@ -29,8 +29,11 @@ class IComponentType;
 class IComponentTypes;
 class IDVBCLocator;
 class IDVBSLocator;
+class IDVBSTuningSpace;
 class IDVBTLocator;
 class IDVBTuneRequest;
+class IDVBTuningSpace;
+class IDVBTuningSpace2;
 class IEnumComponents;
 class IEnumComponentTypes;
 class IEnumTuningSpaces;
@@ -76,6 +79,13 @@ typedef enum ComponentStatus
     StatusUnavailable,
 } ComponentStatus;
 
+typedef enum DVBSystemType
+{\r
+    DVB_Cable,\r
+    DVB_Terrestrial,\r
+    DVB_Satellite,\r
+} DVBSystemType;
+
 typedef enum FECMethod
 {
     BDA_FEC_METHOD_NOT_SET = -1,
@@ -150,6 +160,16 @@ typedef enum Polarisation
     BDA_POLARISATION_MAX         = 5
 } Polarisation;
 
+typedef enum SpectralInversion
+{\r
+    BDA_SPECTRAL_INVERSION_NOT_SET = -1,\r
+    BDA_SPECTRAL_INVERSION_NOT_DEFINED = 0,\r
+    BDA_SPECTRAL_INVERSION_AUTOMATIC = 1,\r
+    BDA_SPECTRAL_INVERSION_NORMAL,\r
+    BDA_SPECTRAL_INVERSION_INVERTED,\r
+    BDA_SPECTRAL_INVERSION_MAX\r
+} SpectralInversion;
+
 typedef enum TransmissionMode
 {
     BDA_XMIT_MODE_NOT_SET = -1,
@@ -453,6 +473,37 @@ public:
     virtual HRESULT __stdcall Clone( ITuningSpace** p_p_tuning_space )=0;
 };
 
+class IDVBTuningSpace : public ITuningSpace\r
+{\r
+public:\r
+    virtual HRESULT __stdcall get_SystemType( DVBSystemType* p_sys_type )=0;\r
+    virtual HRESULT __stdcall put_SystemType( DVBSystemType sys_type )=0;\r
+};\r
+
+class IDVBTuningSpace2 : public IDVBTuningSpace\r
+{\r
+public:\r
+    virtual HRESULT __stdcall get_NetworkID( long* p_l_network_id )=0;\r
+    virtual HRESULT __stdcall put_NetworkID( long l_network_id )=0;\r
+};
+\r
+class IDVBSTuningSpace : public IDVBTuningSpace2\r
+{\r
+public:\r
+    virtual HRESULT __stdcall get_LowOscillator( long* p_l_low_osc )=0;\r
+    virtual HRESULT __stdcall put_LowOscillator( long l_low_osc )=0;\r
+    virtual HRESULT __stdcall get_HighOscillator( long* p_l_high_osc )=0;\r
+    virtual HRESULT __stdcall put_HighOscillator( long l_high_osc )=0;\r
+    virtual HRESULT __stdcall get_LNBSwitch( long* p_l_lnb_switch )=0;\r
+    virtual HRESULT __stdcall put_LNBSwitch( long l_lnb_switch )=0;\r
+    virtual HRESULT __stdcall get_InputRange( BSTR* p_bstr_input_range )=0;\r
+    virtual HRESULT __stdcall put_InputRange( BSTR bstr_input_range )=0;\r
+    virtual HRESULT __stdcall get_SpectralInversion(
+        SpectralInversion* p_spectral_inv )=0;\r
+    virtual HRESULT __stdcall put_SpectralInversion(
+        SpectralInversion spectral_inv )=0;\r
+};
+
 class ITuningSpaceContainer : public IDispatch
 {
 public:
@@ -517,6 +568,8 @@ extern const GUID IID_IDVBCLocator;
 extern const GUID IID_IDVBSLocator;
 extern const GUID IID_IDVBSTuningSpace;
 extern const GUID IID_IDVBTuneRequest;
+extern const GUID IID_IDVBTuningSpace;
+extern const GUID IID_IDVBTuningSpace2;
 extern const GUID IID_IGraphBuilder;
 extern const GUID IID_IMediaControl;
 extern const GUID IID_IMpeg2Demultiplexer;
index 94b12d0..2c9f853 100644 (file)
@@ -435,9 +435,13 @@ int BDAGraph::SubmitDVBSTuneRequest()
         public:
         IDVBTuneRequest* p_dvbs_tune_request;
         IDVBSLocator* p_dvbs_locator;
-        localComPtr(): p_dvbs_tune_request(NULL), p_dvbs_locator(NULL) {};
+        IDVBSTuningSpace* p_dvbs_tuning_space;
+        localComPtr(): p_dvbs_tune_request(NULL), p_dvbs_locator(NULL),
+            p_dvbs_tuning_space(NULL) {};
         ~localComPtr()
         {
+            if( p_dvbs_tuning_space )
+                p_dvbs_tuning_space->Release();
             if( p_dvbs_tune_request )
                 p_dvbs_tune_request->Release();
             if( p_dvbs_locator )
@@ -445,16 +449,21 @@ int BDAGraph::SubmitDVBSTuneRequest()
         }
     } l;
     long l_frequency, l_symbolrate, l_azimuth, l_elevation, l_longitude;
+    long l_lnb_lof1, l_lnb_lof2, l_lnb_slof;
     char* psz_polarisation;
     Polarisation i_polar;
     VARIANT_BOOL b_west;
 
     l_frequency = l_symbolrate = l_azimuth = l_elevation = l_longitude = -1;
+    l_lnb_lof1 = l_lnb_lof2 = l_lnb_slof = -1;
     l_frequency = var_GetInteger( p_access, "dvb-frequency" );
     l_symbolrate = var_GetInteger( p_access, "dvb-srate" );
     l_azimuth = var_GetInteger( p_access, "dvb-azimuth" );
     l_elevation = var_GetInteger( p_access, "dvb-elevation" );
     l_longitude = var_GetInteger( p_access, "dvb-longitude" );
+    l_lnb_lof1 = var_GetInteger( p_access, "dvb-lnb-lof1" );
+    l_lnb_lof2 = var_GetInteger( p_access, "dvb-lnb-lof2" ); 
+    l_lnb_slof = var_GetInteger( p_access, "dvb-lnb-slof" );
     psz_polarisation = var_GetString( p_access, "dvb-polarisation" );
 
     b_west = ( l_longitude < 0 ) ? TRUE : FALSE;
@@ -499,6 +508,15 @@ int BDAGraph::SubmitDVBSTuneRequest()
         return VLC_EGENERIC;
     }
 
+    hr = p_tuning_space->QueryInterface( IID_IDVBSTuningSpace,
+        (void**)&l.p_dvbs_tuning_space );
+    if( FAILED( hr ) )
+    {
+        msg_Warn( p_access, "SubmitDVBSTuneRequest: "\
+            "Cannot QI for IDVBSTuningSpace: hr=0x%8lx", hr );
+        return VLC_EGENERIC;
+    }
+
     hr = S_OK;
     if( l_frequency > 0 )
         hr = l.p_dvbs_locator->put_CarrierFrequency( l_frequency );
@@ -514,6 +532,12 @@ int BDAGraph::SubmitDVBSTuneRequest()
         hr = l.p_dvbs_locator->put_WestPosition( b_west );
     if( SUCCEEDED( hr ) && i_polar != BDA_POLARISATION_NOT_SET )
         hr = l.p_dvbs_locator->put_SignalPolarisation( i_polar );
+    if( SUCCEEDED( hr ) && l_lnb_lof1 > 0 )
+        hr = l.p_dvbs_tuning_space->put_LowOscillator( l_lnb_lof1 );
+    if( SUCCEEDED( hr ) && l_lnb_lof2 > 0 )
+        hr = l.p_dvbs_tuning_space->put_HighOscillator( l_lnb_lof2 );
+    if( SUCCEEDED( hr ) && l_lnb_slof > 0 )
+        hr = l.p_dvbs_tuning_space->put_HighOscillator( l_lnb_slof );
     if( FAILED( hr ) )
     {
         msg_Warn( p_access, "SubmitDVBSTuneRequest: "\