/// <summary> /// Meldet eine relative Nummer einer Quellgruppe bezüglich dieser Auswahl. /// </summary> /// <param name="group">Die zu prüfende Quellgruppe.</param> /// <returns>Eine bei 0 beginnenden laufende Nummer, die in eine Farbcodierung umgesetzt wird.</returns> public override int GetSubGroupIndex(SourceGroup group) { // Convert CableGroup cab = (CableGroup)group; // Check mode switch (cab.Modulation) { case CableModulations.QAM64: return(0); case CableModulations.QAM256: return(1); default: return(2); } }
/// <summary> /// Erzeugt eine neue Auswahlinstanz. /// </summary> /// <param name="source">Die zu betrachtende Quelle.</param> public CableGroupSelector( SourceSelection source ) { // Remember m_Group = (CableGroup) source.Group; }
/// <summary> /// Wählt eine Quellgruppe an. /// </summary> /// <param name="group">Die Daten zur Quellgruppe.</param> /// <returns>Gesetzt, wenn es sich um eine DVB-C Quellgruppe handelt.</returns> private Channel_C?Tune(CableGroup group) { // Not us if (group == null) { return(null); } // Validate if (FrontendType != FrontendType.Cable) { throw new DVBException("Expected " + FrontendType.ToString() + " Channel"); } // Helper var data = new Channel_C { Frequency = group.Frequency, SymbolRate = group.SymbolRate, }; // Spectrum inversion switch (group.SpectrumInversion) { case SpectrumInversions.On: data.Inversion = SpectrumInversion.On; break; case SpectrumInversions.Off: data.Inversion = SpectrumInversion.Off; break; case SpectrumInversions.Auto: data.Inversion = SpectrumInversion.Auto; break; default: data.Inversion = SpectrumInversion.Auto; break; } // Modulation switch (group.Modulation) { case CableModulations.QAM16: data.Qam = Qam.Qam16; break; case CableModulations.QAM32: data.Qam = Qam.Qam32; break; case CableModulations.QAM64: data.Qam = Qam.Qam64; break; case CableModulations.QAM128: data.Qam = Qam.Qam128; break; case CableModulations.QAM256: data.Qam = Qam.Qam256; break; default: data.Qam = Qam.Qam64; break; } // Check supported modes switch (group.Bandwidth) { case Bandwidths.Six: data.Bandwidth = BandwidthType.Six; break; case Bandwidths.Seven: data.Bandwidth = BandwidthType.Seven; break; case Bandwidths.Eight: data.Bandwidth = BandwidthType.Eight; break; case Bandwidths.NotDefined: data.Bandwidth = BandwidthType.None; break; default: data.Bandwidth = BandwidthType.Auto; break; } // Process return(data.SetChannel(this)); }
/// <summary> /// Wählt eine Quellgruppe an. /// </summary> /// <param name="group">Die Daten zur Quellgruppe.</param> /// <returns>Gesetzt, wenn es sich um eine DVB-C Quellgruppe handelt.</returns> private bool SendChannel(CableGroup group) { // Not us if (group == null) { return(false); } // Validate if (FrontendType != FrontendType.Cable) { throw new DVBException("Expected " + FrontendType.ToString() + " Channel"); } // Helper var channel = new Channel_C { Frequency = group.Frequency, SymbolRate = group.SymbolRate, }; // Spectrum inversion switch (group.SpectrumInversion) { case SpectrumInversions.On: channel.Inversion = SpectrumInversion.On; break; case SpectrumInversions.Off: channel.Inversion = SpectrumInversion.Off; break; case SpectrumInversions.Auto: channel.Inversion = SpectrumInversion.Auto; break; default: channel.Inversion = SpectrumInversion.Auto; break; } // Modulation switch (group.Modulation) { case CableModulations.QAM16: channel.Qam = Qam.Qam16; break; case CableModulations.QAM32: channel.Qam = Qam.Qam32; break; case CableModulations.QAM64: channel.Qam = Qam.Qam64; break; case CableModulations.QAM128: channel.Qam = Qam.Qam128; break; case CableModulations.QAM256: channel.Qam = Qam.Qam256; break; default: channel.Qam = Qam.Qam64; break; } // Check supported modes switch (group.Bandwidth) { case Bandwidths.Six: channel.Bandwidth = BandwidthType.Six; break; case Bandwidths.Seven: channel.Bandwidth = BandwidthType.Seven; break; case Bandwidths.Eight: channel.Bandwidth = BandwidthType.Eight; break; case Bandwidths.NotDefined: channel.Bandwidth = BandwidthType.None; break; default: channel.Bandwidth = BandwidthType.Auto; break; } // Process CheckChannel(CDVBFrontend_SetChannel(m_Class.ClassPointer, channel, false)); // Check up for synchronisation Channel_C val1, val2; // Get channel twice CheckChannel(CDVBFrontend_GetChannel(m_Class.ClassPointer, out val1)); CheckChannel(CDVBFrontend_GetChannel(m_Class.ClassPointer, out val2)); // Did it return(true); }
/// <summary> /// Analysiert die aktuelle Konfiguration des Suchlaufs auf Basis /// der DVB <i>Network Information Table (NIT)</i> Informationen. /// </summary> private void AnalyserThread() { // Be safe try { // Configure language UserProfile.ApplyLanguage(); // Uses hardware manager using (HardwareManager.Open()) { // Attach to the hardware itself Hardware device = HardwareManager.OpenHardware(Profile); // Reset counters TotalLocations = m_Locations.Count; CurrentLocation = 0; // Last inversion used SpectrumInversions lastInversion = SpectrumInversions.On; // Process all transponders foreach (GroupLocation location in m_Locations) { // Update counter ++CurrentLocation; // Reset CurrentLocationGroupsPending = 0; CurrentLocationGroup = 0; // Check caller if (!LocationStart(location)) { return; } // Groups found on this location Dictionary <SourceGroup, bool> found = new Dictionary <SourceGroup, bool>(); // Groups with valid network information - only those are considered List <SourceGroup> nitAvailable = new List <SourceGroup>(); // Load counter CurrentLocationGroupsPending = location.Groups.Count; // Process all groups foreach (SourceGroup group in location.Groups) { // Get the expected type Type groupType = group.GetType(); // Clone the group SourceGroup newGroup = SourceGroup.FromString <SourceGroup>(group.ToString()); // Count up --CurrentLocationGroupsPending; ++CurrentLocationGroup; // See if this is already processed if (null != found.Keys.FirstOrDefault(p => p.CompareTo(newGroup, true))) { continue; } // Check for external termination if (null == m_Worker) { return; } // Not supported if (!Profile.SupportsGroup(newGroup) || !device.CanHandle(newGroup)) { // Remember m_UnhandledGroups.Add(newGroup); // Next continue; } // Check caller if (!GroupStart(location, newGroup)) { return; } // Attach to the group if (null != SelectGroup(device, location, newGroup, ref lastInversion)) { // See if we are a cable group CableGroup cableGroup = newGroup as CableGroup; // Attach to the NIT var nit = device.GetLocationInformation(15000); if (null != nit) { // Remember nitAvailable.Add(newGroup); // Process foreach (SourceGroup other in nit.Groups) { if (other.GetType() == groupType) { // See if this is a cable group CableGroup otherCable = other as CableGroup; // Update inversion if (null != otherCable) { // Other must be cable, too if (null == cableGroup) { continue; } // Use same parameters otherCable.SpectrumInversion = cableGroup.SpectrumInversion; otherCable.Bandwidth = cableGroup.Bandwidth; } // Report if (ScannerTraceSwitch.Level >= TraceLevel.Info) { Trace.WriteLine(string.Format(Properties.Resources.Trace_Scanner_NIT, other), ScannerTraceSwitch.DisplayName); } // Mark it found[other] = true; } } } } // Check caller if (!GroupDone(location, newGroup)) { return; } } // Create a brand new scan location ScanLocation scan = location.ToScanLocation(); // Try to update foreach (SourceGroup group in nitAvailable) { // Try to find the full qualified name SourceGroup nitGroup = found.Keys.FirstOrDefault(p => p.CompareTo(group, true)); // Update if (null == nitGroup) { scan.Groups.Add(group); } else { scan.Groups.Add(nitGroup); } } // Just remember m_AnalyseResult[location] = scan; // Check caller if (!LocationDone(location)) { return; } } } } catch (Exception e) { // Remember m_ThreadException = e; } }
/// <summary> /// Erzeugt eine neue Auswahlinstanz. /// </summary> /// <param name="source">Die zu betrachtende Quelle.</param> public CableGroupSelector(SourceSelection source) { // Remember m_Group = (CableGroup)source.Group; }