def getKnownTransponders(self, pos):
     tlist = []
     list = nimmanager.getTransponders(pos)
     for x in list:
         if x[0] == 0:
             parm = eDVBFrontendParametersSatellite()
             parm.frequency = x[1]
             parm.symbol_rate = x[2]
             parm.polarisation = x[3]
             parm.fec = x[4]
             parm.inversion = x[7]
             parm.orbital_position = pos
             parm.system = x[5]
             parm.modulation = x[6]
             parm.rolloff = x[8]
             parm.pilot = x[9]
             if len(x) > 12:
                 parm.is_id = x[10]
                 parm.pls_mode = x[11]
                 parm.pls_code = x[12]
                 if hasattr(parm, "t2mi_plp_id") and len(x) > 13:
                     parm.t2mi_plp_id = x[13]
                     if hasattr(parm, "t2mi_pid") and len(x) > 14:
                         parm.t2mi_pid = x[14]
             tlist.append(parm)
     return tlist
Exemple #2
0
 def tune(self, transponder):
     if self.frontend:
         print "tuning to transponder with data", transponder
         parm = eDVBFrontendParametersSatellite()
         parm.frequency = transponder[0] * 1000
         parm.symbol_rate = transponder[1] * 1000
         parm.polarisation = transponder[2]
         parm.fec = transponder[3]
         parm.inversion = transponder[4]
         parm.orbital_position = transponder[5]
         parm.system = transponder[6]
         parm.modulation = transponder[7]
         parm.rolloff = transponder[8]
         parm.pilot = transponder[9]
         if len(transponder) > 12:
             parm.is_id = transponder[10]
             parm.pls_mode = transponder[11]
             parm.pls_code = transponder[12]
         else:
             parm.is_id = -1
             parm.pls_mode = eDVBFrontendParametersSatellite.PLS_Unknown
             parm.pls_code = 0
         feparm = eDVBFrontendParameters()
         feparm.setDVBS(parm, self.ignore_rotor)
         self.lastparm = feparm
         self.frontend.tune(feparm)
Exemple #3
0
 def setNextRange(self):
     if self.current_range is None:
         self.current_range = 0
     else:
         self.current_range += 1
     if len(self.range_list) > self.current_range:
         bs_range = self.range_list[self.current_range]
         parm = eDVBFrontendParametersSatellite()
         parm.frequency = bs_range[0]
         if self.nim.isCompatible("DVB-S2"):
             steps = {
                 5: 2000,
                 4: 4000,
                 3: 6000,
                 2: 8000,
                 1: 10000
             }[self.scan_sat.bs_accuracy.value]
             parm.system = self.scan_sat.bs_system.value
             parm.pilot = eDVBFrontendParametersSatellite.Pilot_Unknown
             parm.rolloff = eDVBFrontendParametersSatellite.RollOff_alpha_0_35
             parm.pls_mode = eDVBFrontendParametersSatellite.PLS_Gold
             parm.is_id = eDVBFrontendParametersSatellite.No_Stream_Id_Filter
         else:
             steps = 4000
             parm.system = eDVBFrontendParametersSatellite.System_DVB_S
         parm.symbol_rate = steps
         parm.fec = eDVBFrontendParametersSatellite.FEC_Auto
         parm.inversion = eDVBFrontendParametersSatellite.Inversion_Unknown
         parm.polarisation = bs_range[2]
         parm.orbital_position = self.orb_pos
         parm.modulation = eDVBFrontendParametersSatellite.Modulation_QPSK
         return parm
     return None
Exemple #4
0
    def getMisTransponders(self, pos):
        tlist = []

        def isMultistreamTP(tp):
            # since we are using Gold sequences there is no need to check the PLS Mode
            return tp[5] == eDVBFrontendParametersSatellite.System_DVB_S2 and (
                tp[10] > eDVBFrontendParametersSatellite.No_Stream_Id_Filter or
                tp[12] > eDVBFrontendParametersSatellite.PLS_Default_Gold_Code)

        for tp in [
                tp for tp in nimmanager.getTransponders(pos)
                if isMultistreamTP(tp)
        ]:
            if tp[0] == 0:
                parm = eDVBFrontendParametersSatellite()
                parm.frequency = tp[1]
                parm.symbol_rate = tp[2]
                parm.polarisation = tp[3]
                parm.fec = tp[4]
                parm.inversion = tp[7]
                parm.orbital_position = pos
                parm.system = tp[5]
                parm.modulation = tp[6]
                parm.rolloff = tp[8]
                parm.pilot = tp[9]
                parm.is_id = tp[10]
                parm.pls_mode = tp[11]
                parm.pls_code = tp[12]
                if hasattr(parm, "t2mi_plp_id") and len(tp) > 13:
                    parm.t2mi_plp_id = tp[13]
                    if hasattr(parm, "t2mi_pid") and len(tp) > 14:
                        parm.t2mi_pid = tp[14]
                tlist.append(parm)
        return tlist
Exemple #5
0
	def tune(self, transponder):
		if self.frontend:
			print "[TuneTest] tuning to transponder with data", transponder
			parm = eDVBFrontendParametersSatellite()
			parm.frequency = transponder[0] * 1000
			parm.symbol_rate = transponder[1] * 1000
			parm.polarisation = transponder[2]
			parm.fec = transponder[3]
			parm.inversion = transponder[4]
			parm.orbital_position = transponder[5]
			parm.system = transponder[6]
			parm.modulation = transponder[7]
			parm.rolloff = transponder[8]
			parm.pilot = transponder[9]
			if len(transponder) > 12:
				parm.is_id = transponder[10]
				parm.pls_mode = transponder[11]
				parm.pls_code = transponder[12]
			else:
				parm.is_id = eDVBFrontendParametersSatellite.No_Stream_Id_Filter
				parm.pls_mode = eDVBFrontendParametersSatellite.PLS_Gold
				parm.pls_code = eDVBFrontendParametersSatellite.PLS_Default_Gold_Code
			if len(transponder) > 13:
				parm.t2mi_plp_id = transponder[13]
			else:
				parm.t2mi_plp_id = eDVBFrontendParametersSatellite.No_T2MI_PLP_Id
			self.tuneSatObj(parm)
	def setNextRange(self):
		if self.current_range is None:
			self.current_range = 0
		else:
			self.current_range += 1
		if len(self.range_list) > self.current_range:
			bs_range = self.range_list[self.current_range]
			print "Sat Blindscan current range", bs_range
			parm = eDVBFrontendParametersSatellite()
			parm.frequency = bs_range[0]
			if self.nim.isCompatible("DVB-S2"):
				steps = { 5 : 2000, 4 : 4000, 3 : 6000, 2 : 8000, 1 : 10000 }[self.scan_sat.bs_accuracy.value]
				parm.system = self.scan_sat.bs_system.value
				parm.pilot = eDVBFrontendParametersSatellite.Pilot_Unknown
				parm.rolloff = eDVBFrontendParametersSatellite.RollOff_alpha_0_35
			else:
				steps = 4000
				parm.system = eDVBFrontendParametersSatellite.System_DVB_S
			if self.auto_scan:
				parm.symbol_rate = (bs_range[1] - bs_range[0]) / 1000
			else:
				parm.symbol_rate = steps
			parm.fec = eDVBFrontendParametersSatellite.FEC_Auto
			parm.inversion = eDVBFrontendParametersSatellite.Inversion_Unknown
			parm.polarisation = bs_range[2]
			parm.orbital_position = self.orb_pos
			parm.modulation = eDVBFrontendParametersSatellite.Modulation_QPSK
			return parm
		return None
Exemple #7
0
 def tune(self, transponder):
     if self.frontend:
         print '[TuneTest] tuning to transponder with data', transponder
         parm = eDVBFrontendParametersSatellite()
         parm.frequency = transponder[0] * 1000
         parm.symbol_rate = transponder[1] * 1000
         parm.polarisation = transponder[2]
         parm.fec = transponder[3]
         parm.inversion = transponder[4]
         parm.orbital_position = transponder[5]
         parm.system = transponder[6]
         parm.modulation = transponder[7]
         parm.rolloff = transponder[8]
         parm.pilot = transponder[9]
         if len(transponder) > 12:
             parm.is_id = transponder[10]
             parm.pls_mode = transponder[11]
             parm.pls_code = transponder[12]
         else:
             parm.is_id = eDVBFrontendParametersSatellite.No_Stream_Id_Filter
             parm.pls_mode = eDVBFrontendParametersSatellite.PLS_Gold
             parm.pls_code = eDVBFrontendParametersSatellite.PLS_Default_Gold_Code
         if len(transponder) > 14:
             parm.t2mi_plp_id = transponder[13]
             parm.t2mi_pid = transponder[14]
         else:
             parm.t2mi_plp_id = eDVBFrontendParametersSatellite.No_T2MI_PLP_Id
             parm.t2mi_pid = eDVBFrontendParametersSatellite.T2MI_Default_Pid
         self.tuneSatObj(parm)
 def blindscanContainerClose(self, retval):
     lines = self.full_data.split('\n')
     self.full_data = ""  # Clear this string so we don't get duplicates on subsequent runs
     for line in lines:
         data = line.split()
         print "cnt :", len(data), ", data :", data
         if len(data) >= 10 and self.dataIsGood(data):
             if data[0] == 'OK':
                 parm = eDVBFrontendParametersSatellite()
                 sys = {
                     "DVB-S": eDVBFrontendParametersSatellite.System_DVB_S,
                     "DVB-S2": eDVBFrontendParametersSatellite.System_DVB_S2
                 }
                 qam = {
                     "QPSK": parm.Modulation_QPSK,
                     "8PSK": parm.Modulation_8PSK
                 }
                 inv = {
                     "INVERSION_OFF": parm.Inversion_Off,
                     "INVERSION_ON": parm.Inversion_On,
                     "INVERSION_AUTO": parm.Inversion_Unknown
                 }
                 fec = {
                     "FEC_AUTO": parm.FEC_Auto,
                     "FEC_1_2": parm.FEC_1_2,
                     "FEC_2_3": parm.FEC_2_3,
                     "FEC_3_4": parm.FEC_3_4,
                     "FEC_5_6": parm.FEC_5_6,
                     "FEC_7_8": parm.FEC_7_8,
                     "FEC_8_9": parm.FEC_8_9,
                     "FEC_3_5": parm.FEC_3_5,
                     "FEC_9_10": parm.FEC_9_10,
                     "FEC_NONE": parm.FEC_None
                 }
                 roll = {
                     "ROLLOFF_20": parm.RollOff_alpha_0_20,
                     "ROLLOFF_25": parm.RollOff_alpha_0_25,
                     "ROLLOFF_35": parm.RollOff_alpha_0_35
                 }
                 pilot = {
                     "PILOT_ON": parm.Pilot_On,
                     "PILOT_OFF": parm.Pilot_Off
                 }
                 pol = {
                     "HORIZONTAL": parm.Polarisation_Horizontal,
                     "VERTICAL": parm.Polarisation_Vertical
                 }
                 parm.orbital_position = self.orb_position
                 parm.polarisation = pol[data[1]]
                 parm.frequency = int(data[2])
                 parm.symbol_rate = int(data[3])
                 parm.system = sys[data[4]]
                 parm.inversion = inv[data[5]]
                 parm.pilot = pilot[data[6]]
                 parm.fec = fec[data[7]]
                 parm.modulation = qam[data[8]]
                 parm.rolloff = roll[data[9]]
                 self.tmp_tplist.append(parm)
     self.blindscan_session.close(True)
Exemple #9
0
	def appendFrontendParams(self, data):
		if data[0] == 'OK':
			parm = eDVBFrontendParametersSatellite()
			sys = { "DVB-S" : eDVBFrontendParametersSatellite.System_DVB_S,
				"DVB-S2" : eDVBFrontendParametersSatellite.System_DVB_S2,
				"DVB-S2X" : eDVBFrontendParametersSatellite.System_DVB_S2X}
			qam = { "QPSK" : parm.Modulation_QPSK,
				"8PSK" : parm.Modulation_8PSK,
				"16APSK" : parm.Modulation_16APSK,
				"32APSK" : parm.Modulation_32APSK,
				"8APSK" : parm.Modulation_8APSK}
			inv = { "INVERSION_OFF" : parm.Inversion_Off,
				"INVERSION_ON" : parm.Inversion_On,
				"INVERSION_AUTO" : parm.Inversion_Unknown}
			fec = { "FEC_AUTO" : parm.FEC_Auto,
				"FEC_1_2" : parm.FEC_1_2,
				"FEC_2_3" : parm.FEC_2_3,
				"FEC_3_4" : parm.FEC_3_4,
				"FEC_5_6": parm.FEC_5_6,
				"FEC_7_8" : parm.FEC_7_8,
				"FEC_8_9" : parm.FEC_8_9,
				"FEC_3_5" : parm.FEC_3_5,
				"FEC_9_10" : parm.FEC_9_10,
				"FEC_NONE" : parm.FEC_None,
				"FEC_13_45" : parm.FEC_13_45, "FEC_9_20" : parm.FEC_9_20, "FEC_11_20" : parm.FEC_11_20, "FEC_23_36" : parm.FEC_23_36, "FEC_25_36" : parm.FEC_25_36,
				"FEC_13_18" : parm.FEC_13_18, "FEC_26_45" : parm.FEC_26_45, "FEC_28_45" : parm.FEC_28_45, "FEC_7_9" : parm.FEC_7_9, "FEC_77_90" : parm.FEC_77_90,
				"FEC_32_45" : parm.FEC_32_45, "FEC_11_15" : parm.FEC_11_15, "FEC_1_2_L" : parm.FEC_1_2_L, "FEC_8_15_L" : parm.FEC_8_15_L, "FEC_3_5_L" : parm.FEC_3_5_L,
				"FEC_2_3_L" : parm.FEC_2_3_L, "FEC_5_9_L" : parm.FEC_5_9_L, "FEC_26_45_L" : parm.FEC_26_45_L}
			roll ={ "ROLLOFF_20" : parm.RollOff_alpha_0_20,
				"ROLLOFF_25" : parm.RollOff_alpha_0_25,
				"ROLLOFF_35" : parm.RollOff_alpha_0_35}
			pilot={ "PILOT_ON" : parm.Pilot_On,
				"PILOT_OFF" : parm.Pilot_Off,
				"PILOT_AUTO" : parm.Pilot_Unknown}
			pol = {	"HORIZONTAL" : parm.Polarisation_Horizontal,
				"VERTICAL" : parm.Polarisation_Vertical}
			try :
				parm.orbital_position = self.orb_position
				parm.polarisation = pol[data[1]]
				parm.frequency = int(data[2])
				parm.symbol_rate = int(data[3])
				parm.system = sys[data[4]]
				parm.inversion = inv[data[5]]
				parm.pilot = pilot[data[6]]
				parm.fec = fec[data[7]]
				parm.modulation = qam[data[8]]
				parm.rolloff = roll[data[9]]
				parm.is_id = int(data[10])
				parm.pls_mode = eDVBFrontendParametersSatellite.PLS_Unknown
				parm.pls_code = 0
				self.tmp_tplist.append(parm)
			except:	pass
Exemple #10
0
	def addSatTransponder(self, tlist, frequency, symbol_rate, polarisation, fec, inversion, orbital_position, system, modulation, rolloff, pilot):
		parm = eDVBFrontendParametersSatellite()
		parm.modulation = modulation
		parm.system = system
		parm.frequency = frequency * 1000
		parm.symbol_rate = symbol_rate * 1000
		parm.polarisation = polarisation
		parm.fec = fec
		parm.inversion = inversion
		parm.orbital_position = orbital_position
		parm.rolloff = rolloff
		parm.pilot = pilot
		tlist.append(parm)
Exemple #11
0
 def getTransponderParameters(self, number):
     transponderParameters = eDVBFrontendParametersSatellite()
     transponderParameters.frequency = self.transponders[number][0]
     transponderParameters.symbol_rate = self.transponders[number][1]
     transponderParameters.fec = self.transponders[number][2]
     transponderParameters.orbital_position = self.transponders[number][3]
     transponderParameters.polarisation = self.transponders[number][4]
     transponderParameters.inversion = self.transponders[number][5]
     transponderParameters.system = self.transponders[number][6]
     transponderParameters.modulation = self.transponders[number][7]
     transponderParameters.rolloff = self.transponders[number][8]
     transponderParameters.pilot = self.transponders[number][9]
     return transponderParameters
Exemple #12
0
	def getTransponderParameters(self, number):
		transponderParameters = eDVBFrontendParametersSatellite()
		transponderParameters.frequency = self.transponders[number][0]
		transponderParameters.symbol_rate = self.transponders[number][1]
		transponderParameters.fec = self.transponders[number][2]
		transponderParameters.orbital_position = self.transponders[number][3]
		transponderParameters.polarisation = self.transponders[number][4]
		transponderParameters.inversion = self.transponders[number][5]
		transponderParameters.system = self.transponders[number][6]
		transponderParameters.modulation = self.transponders[number][7]
		transponderParameters.rolloff = self.transponders[number][8]
		transponderParameters.pilot = self.transponders[number][9]
		return transponderParameters
	def blindscanContainerClose(self, retval):
		lines = self.full_data.split('\n')
		self.full_data = "" # Clear this string so we don't get duplicates on subsequent runs
		for line in lines:
			data = line.split()
			print "cnt :", len(data), ", data :", data
			if len(data) >= 10 and self.dataIsGood(data) :
				if data[0] == 'OK':
					parm = eDVBFrontendParametersSatellite()
					sys = { "DVB-S" : eDVBFrontendParametersSatellite.System_DVB_S,
						"DVB-S2" : eDVBFrontendParametersSatellite.System_DVB_S2}
					qam = { "QPSK" : parm.Modulation_QPSK,
						"8PSK" : parm.Modulation_8PSK}
					inv = { "INVERSION_OFF" : parm.Inversion_Off,
						"INVERSION_ON" : parm.Inversion_On,
						"INVERSION_AUTO" : parm.Inversion_Unknown}
					fec = { "FEC_AUTO" : parm.FEC_Auto,
						"FEC_1_2" : parm.FEC_1_2,
						"FEC_2_3" : parm.FEC_2_3,
						"FEC_3_4" : parm.FEC_3_4,
						"FEC_4_5" : parm.FEC_4_5,
						"FEC_5_6": parm.FEC_5_6,
						"FEC_7_8" : parm.FEC_7_8,
						"FEC_8_9" : parm.FEC_8_9,
						"FEC_3_5" : parm.FEC_3_5,
						"FEC_9_10" : parm.FEC_9_10,
						"FEC_NONE" : parm.FEC_None}
					roll ={ "ROLLOFF_20" : parm.RollOff_alpha_0_20,
						"ROLLOFF_25" : parm.RollOff_alpha_0_25,
						"ROLLOFF_35" : parm.RollOff_alpha_0_35}
					pilot={ "PILOT_ON" : parm.Pilot_On,
						"PILOT_OFF" : parm.Pilot_Off,
						"PILOT_AUTO" : parm.Pilot_Unknown}
					pol = {	"HORIZONTAL" : parm.Polarisation_Horizontal,
						"VERTICAL" : parm.Polarisation_Vertical}
					parm.orbital_position = self.orb_position
					if brandoem == 'azbox':
						parm.polarisation = self.polsave
					else:
						parm.polarisation = pol[data[1]]
					parm.frequency = int(data[2])
					parm.symbol_rate = int(data[3])
					parm.system = sys[data[4]]
					parm.inversion = inv[data[5]]
					parm.pilot = pilot[data[6]]
					parm.fec = fec[data[7]]
					parm.modulation = qam[data[8]]
					parm.rolloff = roll[data[9]]
					self.tmp_tplist.append(parm)
		self.blindscan_session.close(True)
	def addSatTransponder(self, tlist, frequency, symbol_rate, polarisation, fec, inversion, orbital_position, system, modulation, rolloff, pilot):
		print "Add Sat: frequ: " + str(frequency) + " symbol: " + str(symbol_rate) + " pol: " + str(polarisation) + " fec: " + str(fec) + " inversion: " + str(inversion) + " modulation: " + str(modulation) + " system: " + str(system) + " rolloff" + str(rolloff) + " pilot" + str(pilot)
		print "orbpos: " + str(orbital_position)
		parm = eDVBFrontendParametersSatellite()
		parm.modulation = modulation
		parm.system = system
		parm.frequency = frequency * 1000
		parm.symbol_rate = symbol_rate * 1000
		parm.polarisation = polarisation
		parm.fec = fec
		parm.inversion = inversion
		parm.orbital_position = orbital_position
		parm.rolloff = rolloff
		parm.pilot = pilot
		tlist.append(parm)
Exemple #15
0
	def addSatTransponder(self, tlist, frequency, symbol_rate, polarisation, fec, inversion, orbital_position, system, modulation, rolloff, pilot):
		print "Add Sat: frequency: " + str(frequency) + " symbol: " + str(symbol_rate) + " pol: " + str(polarisation) + " fec: " + str(fec) + " inversion: " + str(inversion) + " modulation: " + str(modulation) + " system: " + str(system) + " rolloff" + str(rolloff) + " pilot" + str(pilot)
		print "orbpos: " + str(orbital_position)
		parm = eDVBFrontendParametersSatellite()
		parm.modulation = modulation
		parm.system = system
		parm.frequency = frequency * 1000
		parm.symbol_rate = symbol_rate * 1000
		parm.polarisation = polarisation
		parm.fec = fec
		parm.inversion = inversion
		parm.orbital_position = orbital_position
		parm.rolloff = rolloff
		parm.pilot = pilot
		tlist.append(parm)
Exemple #16
0
	def tune(self, transponder):
		if self.frontend:
			print "[TuneTest] tuning to transponder with data", transponder
			parm = eDVBFrontendParametersSatellite()
			parm.frequency = transponder[0] * 1000
			parm.symbol_rate = transponder[1] * 1000
			parm.polarisation = transponder[2]
			parm.fec = transponder[3]
			parm.inversion = transponder[4]
			parm.orbital_position = transponder[5]
			parm.system = transponder[6]
			parm.modulation = transponder[7]
			parm.rolloff = transponder[8]
			parm.pilot = transponder[9]
			self.tuneSatObj(parm)
Exemple #17
0
 def tune(self, transponder):
     if self.frontend:
         print "[TuneTest] tuning to transponder with data", transponder
         parm = eDVBFrontendParametersSatellite()
         parm.frequency = transponder[0] * 1000
         parm.symbol_rate = transponder[1] * 1000
         parm.polarisation = transponder[2]
         parm.fec = transponder[3]
         parm.inversion = transponder[4]
         parm.orbital_position = transponder[5]
         parm.system = transponder[6]
         parm.modulation = transponder[7]
         parm.rolloff = transponder[8]
         parm.pilot = transponder[9]
         self.tuneSatObj(parm)
Exemple #18
0
 def tune(self, transponder):
     if self.frontend:
         print "tuning to transponder with data", transponder
         parm = eDVBFrontendParametersSatellite()
         parm.frequency = transponder[0] * 1000
         parm.symbol_rate = transponder[1] * 1000
         parm.polarisation = transponder[2]
         parm.fec = transponder[3]
         parm.inversion = transponder[4]
         parm.orbital_position = transponder[5]
         parm.system = 0  # FIXMEE !! HARDCODED DVB-S (add support for DVB-S2)
         parm.modulation = 1  # FIXMEE !! HARDCODED QPSK
         feparm = eDVBFrontendParameters()
         feparm.setDVBS(parm)
         self.lastparm = feparm
         self.frontend.tune(feparm)
	def tune(self, transponder):
		if self.frontend:
			print "tuning to transponder with data", transponder
			parm = eDVBFrontendParametersSatellite()
			parm.frequency = transponder[0] * 1000
			parm.symbol_rate = transponder[1] * 1000
			parm.polarisation = transponder[2]
			parm.fec = transponder[3]
			parm.inversion = transponder[4]
			parm.orbital_position = transponder[5]
			parm.system = 0  # FIXMEE !! HARDCODED DVB-S (add support for DVB-S2)
			parm.modulation = 1 # FIXMEE !! HARDCODED QPSK
			feparm = eDVBFrontendParameters()
			feparm.setDVBS(parm)
			self.lastparm = feparm
			self.frontend.tune(feparm)
Exemple #20
0
	def getTransponderParameters(self, number):
		transponderParameters = eDVBFrontendParametersSatellite()
		transponderParameters.frequency = transponders[number][0]
		transponderParameters.symbol_rate = transponders[number][1]
		transponderParameters.fec = transponders[number][2]
		transponderParameters.orbital_position = transponders[number][3]
		transponderParameters.polarisation = transponders[number][4]
		transponderParameters.inversion = transponders[number][5]
		transponderParameters.system = transponders[number][6]
		transponderParameters.modulation = transponders[number][7]
		transponderParameters.rolloff = transponders[number][8]
		transponderParameters.pilot = transponders[number][9]
		transponderParameters.is_id = eDVBFrontendParametersSatellite.No_Stream_Id_Filter
		transponderParameters.pls_mode = eDVBFrontendParametersSatellite.PLS_Gold
		transponderParameters.pls_code = eDVBFrontendParametersSatellite.PLS_Default_Gold_Code
		return transponderParameters
Exemple #21
0
 def getInitialTransponderList(self, tlist, pos):
     list = nimmanager.getTransponders(pos)
     for x in list:
         if x[0] == 0:  #SAT
             parm = eDVBFrontendParametersSatellite()
             parm.frequency = x[1]
             parm.symbol_rate = x[2]
             parm.polarisation = x[3]
             parm.fec = x[4]
             parm.inversion = x[7]
             parm.orbital_position = pos
             parm.system = x[5]
             parm.modulation = x[6]
             parm.rolloff = x[8]
             parm.pilot = x[9]
             tlist.append(parm)
def getInitialTransponderList(tlist, pos):
	list = nimmanager.getTransponders(pos)
	for x in list:
		if x[0] == 0:		#SAT
			parm = eDVBFrontendParametersSatellite()
			parm.frequency = x[1]
			parm.symbol_rate = x[2]
			parm.polarisation = x[3]
			parm.fec = x[4]
			parm.inversion = x[7]
			parm.orbital_position = pos
			parm.system = x[5]
			parm.modulation = x[6]
			parm.rolloff = x[8]
			parm.pilot = x[9]
			tlist.append(parm)
Exemple #23
0
	def getTransponderParameters(self, number):
		transponderParameters = eDVBFrontendParametersSatellite()
		transponderParameters.frequency = self.transponders[number][0]
		transponderParameters.symbol_rate = self.transponders[number][1]
		transponderParameters.fec = self.transponders[number][2]
		transponderParameters.orbital_position = self.transponders[number][3]
		transponderParameters.polarisation = self.transponders[number][4]
		transponderParameters.inversion = self.transponders[number][5]
		transponderParameters.system = self.transponders[number][6]
		transponderParameters.modulation = self.transponders[number][7]
		transponderParameters.rolloff = self.transponders[number][8]
		transponderParameters.pilot = self.transponders[number][9]
		transponderParameters.is_id = eDVBFrontendParametersSatellite.No_Stream_Id_Filter
		transponderParameters.pls_mode = eDVBFrontendParametersSatellite.PLS_Gold
		transponderParameters.pls_code = eDVBFrontendParametersSatellite.PLS_Default_Gold_Code
		return transponderParameters
Exemple #24
0
	def tune(self, transponder):
		if self.frontend:
			print "tuning to transponder with data", transponder
			parm = eDVBFrontendParametersSatellite()
			parm.frequency = transponder[0] * 1000
			parm.symbol_rate = transponder[1] * 1000
			parm.polarisation = transponder[2]
			parm.fec = transponder[3]
			parm.inversion = transponder[4]
			parm.orbital_position = transponder[5]
			parm.system = transponder[6]
			parm.modulation = transponder[7]
			parm.rolloff = transponder[8]
			parm.pilot = transponder[9]
			feparm = eDVBFrontendParameters()
			feparm.setDVBS(parm, self.ignore_rotor)
			self.lastparm = feparm
			self.frontend.tune(feparm)
	def getInitialTransponderProviderList(self, tlist, pos, providers=None):
		list = nimmanager.getTransponders(pos)
		for x in list:
			pol = x[3]
			if x[3] == 2:
				pol = 0
			if x[3] == 3:
				pol = 1
			if x[0] == 0 and providers is not None and (x[1], pol) in providers:
				parm = eDVBFrontendParametersSatellite()
				parm.frequency = x[1]
				parm.symbol_rate = x[2]
				parm.polarisation = x[3]
				parm.fec = x[4]
				parm.inversion = x[7]
				parm.orbital_position = pos
				parm.system = x[5]
				parm.modulation = x[6]
				parm.rolloff = x[8]
				parm.pilot = x[9]
				tlist.append(parm)
Exemple #26
0
	def tune(self, transponder):
		if self.frontend:
			print "tuning to transponder with data", transponder
			parm = eDVBFrontendParametersSatellite()
			parm.frequency = int(transponder[0] * 1000)
			parm.symbol_rate = transponder[1] * 1000
			parm.polarisation = transponder[2]
			parm.fec = transponder[3]
			parm.inversion = transponder[4]
			parm.orbital_position = transponder[5]
			parm.system = transponder[6]
			parm.modulation = transponder[7]
			parm.rolloff = transponder[8]
			parm.pilot = transponder[9]
			parm.is_id = transponder[10] if len(transponder) > 10 else -1
			parm.pls_mode = transponder[11] if len(transponder) > 11 else eDVBFrontendParametersSatellite.PLS_Unknown
			parm.pls_code = transponder[12] if len(transponder) > 12 else 0
			feparm = eDVBFrontendParameters()
			feparm.setDVBS(parm, self.ignore_rotor)
			self.lastparm = feparm
			self.frontend.tune(feparm)
	def getTransponder(self, tp):
		PLS_Default_Gold_Code = hasattr(eDVBFrontendParametersSatellite, "PLS_Default_Gold_Code") and eDVBFrontendParametersSatellite.PLS_Default_Gold_Code or 0 # Hack for OpenPLi 7.0
		parm = eDVBFrontendParametersSatellite()
		parm.frequency = tp["frequency"]
		parm.symbol_rate = tp["symbol_rate"]
		parm.polarisation = tp["polarization"]
		parm.fec = tp.get("fec_inner", eDVBFrontendParametersSatellite.FEC_Auto)
		parm.inversion = tp.get("inversion", eDVBFrontendParametersSatellite.Inversion_Unknown)
		parm.orbital_position = tp["orbital_position"]
		parm.system = tp.get("system", eDVBFrontendParametersSatellite.System_DVB_S)
		parm.modulation = tp.get("modulation", eDVBFrontendParametersSatellite.Modulation_QPSK)
		parm.rolloff = tp.get("rolloff", eDVBFrontendParametersSatellite.RollOff_alpha_0_35)
		parm.pilot = tp.get("pilot", eDVBFrontendParametersSatellite.Pilot_Unknown)
		parm.is_id = tp.get("is_id", eDVBFrontendParametersSatellite.No_Stream_Id_Filter)
		parm.pls_mode = tp.get("pls_mode", eDVBFrontendParametersSatellite.PLS_Gold)
		parm.pls_code = tp.get("pls_code", PLS_Default_Gold_Code)
		if hasattr(parm, "t2mi_plp_id"):
			parm.t2mi_plp_id = tp.get("t2mi_plp_id", eDVBFrontendParametersSatellite.No_T2MI_PLP_Id)
		if hasattr(parm, "t2mi_pid"):
			parm.t2mi_pid = tp.get("t2mi_pid", eDVBFrontendParametersSatellite.T2MI_Default_Pid)
		return parm
Exemple #28
0
	def setNextRange(self):
		if self.current_range is None:
			self.current_range = 0
		else:
			self.current_range += 1
		print("[dmmBlindscan][setNextRange] self.current_range", self.current_range)
		if len(self.range_list) > self.current_range:
			bs_range = self.range_list[self.current_range]
			print("[dmmBlindscan][setNextRange] Sat Blindscan current range", bs_range)
			parm = eDVBFrontendParametersSatellite()
			if self.is_c_band_scan:
				parm.frequency = bs_range[1]
			else:
				parm.frequency = bs_range[0]
			if self.nim.isCompatible("DVB-S2"):
				steps = {5: 2000, 4: 4000, 3: 6000, 2: 8000, 1: 10000}[self.dmmBlindscan.accuracy.value]
				parm.system = self.dmmBlindscan.system.value
				parm.pilot = eDVBFrontendParametersSatellite.Pilot_Unknown
				parm.rolloff = eDVBFrontendParametersSatellite.RollOff_alpha_0_35
				parm.pls_mode = eDVBFrontendParametersSatellite.PLS_Gold
				parm.is_id = eDVBFrontendParametersSatellite.No_Stream_Id_Filter
				parm.pls_code = eDVBFrontendParametersSatellite.PLS_Default_Gold_Code
				if hasattr(parm, "t2mi_plp_id"):
					parm.t2mi_plp_id = eDVBFrontendParametersSatellite.No_T2MI_PLP_Id
				if hasattr(parm, "t2mi_pid"):
					parm.t2mi_pid = eDVBFrontendParametersSatellite.T2MI_Default_Pid
			else:
				steps = 4000
				parm.system = eDVBFrontendParametersSatellite.System_DVB_S
			if self.auto_scan:
				parm.symbol_rate = (bs_range[1] - bs_range[0]) // 1000
			else:
				parm.symbol_rate = steps
			parm.fec = eDVBFrontendParametersSatellite.FEC_Auto
			parm.inversion = eDVBFrontendParametersSatellite.Inversion_Unknown
			parm.polarisation = bs_range[2]
			parm.orbital_position = self.orb_pos
			parm.modulation = eDVBFrontendParametersSatellite.Modulation_QPSK
			return parm
		return None
 def getInitialTransponderProviderList(self, tlist, pos, providers=None):
     list = nimmanager.getTransponders(pos)
     for x in list:
         pol = x[3]
         if x[3] == 2:
             pol = 0
         if x[3] == 3:
             pol = 1
         if x[0] == 0 and providers is not None and (x[1],
                                                     pol) in providers:
             parm = eDVBFrontendParametersSatellite()
             parm.frequency = x[1]
             parm.symbol_rate = x[2]
             parm.polarisation = x[3]
             parm.fec = x[4]
             parm.inversion = x[7]
             parm.orbital_position = pos
             parm.system = x[5]
             parm.modulation = x[6]
             parm.rolloff = x[8]
             parm.pilot = x[9]
             tlist.append(parm)
Exemple #30
0
 def tune(self, transponder):
     if self.frontend:
         print "[TuneTest] tuning to transponder with data", transponder
         parm = eDVBFrontendParametersSatellite()
         parm.frequency = transponder[0] * 1000
         parm.symbol_rate = transponder[1] * 1000
         parm.polarisation = transponder[2]
         parm.fec = transponder[3]
         parm.inversion = transponder[4]
         parm.orbital_position = transponder[5]
         parm.system = transponder[6]
         parm.modulation = transponder[7]
         parm.rolloff = transponder[8]
         parm.pilot = transponder[9]
         if len(transponder) > 12:
             parm.is_id = transponder[10]
             parm.pls_mode = transponder[11]
             parm.pls_code = transponder[12]
         else:
             parm.is_id = eDVBFrontendParametersSatellite.No_Stream_Id_Filter
             parm.pls_mode = 0
             parm.pls_code = 1
         self.tuneSatObj(parm)
Exemple #31
0
 def tune(self, transponder):
     if self.frontend:
         print "[TuneTest] tuning to transponder with data", transponder
         parm = eDVBFrontendParametersSatellite()
         parm.frequency = transponder[0] * 1000
         parm.symbol_rate = transponder[1] * 1000
         parm.polarisation = transponder[2]
         parm.fec = transponder[3]
         parm.inversion = transponder[4]
         parm.orbital_position = transponder[5]
         parm.system = transponder[6]
         parm.modulation = transponder[7]
         parm.rolloff = transponder[8]
         parm.pilot = transponder[9]
         if len(transponder) > 12:
             parm.is_id = transponder[10]
             parm.pls_mode = transponder[11]
             parm.pls_code = transponder[12]
         else:
             parm.is_id = -1,  # NO_STREAM_ID_FILTER
             parm.pls_mode = eDVBFrontendParametersSatellite.PLS_Gold
             parm.pls_code = 0,  # default gold PLS code
         self.tuneSatObj(parm)
Exemple #32
0
    def doTune(self):
        from Screens.Standby import inStandby

        if self.providers[self.currentAction]["streamtype"] == "dvbs":
            transponder = self.providers[self.currentAction]["transponder"]
        else:
            bouquet_key = None
            providers_tmp = config.autobouquetsmaker.providers.value.split("|")
            for provider_tmp in providers_tmp:
                provider_config = ProviderConfig(provider_tmp)
                provider_key = provider_config.getProvider()
                if self.currentAction != provider_key:
                    continue
                bouquet_key = provider_config.getArea()

            if not bouquet_key:
                print >> log, "[AutoBouquetsMaker] No area found"
                self.showError(_("No area found"))
                return

            transponder = self.providers[self.currentAction]["bouquets"][bouquet_key]

        nimList = []
        for nim in nimmanager.nim_slots:
            if (nim.config_mode not in ("loopthrough", "satposdepends", "nothing")) and (
                (self.providers[self.currentAction]["streamtype"] == "dvbs" and nim.isCompatible("DVB-S"))
                or (self.providers[self.currentAction]["streamtype"] == "dvbc" and nim.isCompatible("DVB-C"))
                or (self.providers[self.currentAction]["streamtype"] == "dvbt" and nim.isCompatible("DVB-T"))
            ):
                nimList.append(nim.slot)
        if len(nimList) == 0:
            print >> log, "[AutoBouquetsMaker] No NIMs found"
            self.showError(_("No NIMs found"))
            return

        resmanager = eDVBResourceManager.getInstance()
        if not resmanager:
            print >> log, "[AutoBouquetsMaker] Cannot retrieve Resource Manager instance"
            self.showError(_("Cannot retrieve Resource Manager instance"))
            return

        if self.providers[self.currentAction]["streamtype"] == "dvbs":
            print >> log, "[AutoBouquetsMaker] Search NIM for orbital position %d" % transponder["orbital_position"]
        else:
            print >> log, "[AutoBouquetsMaker] Search NIM"

            # stop pip if running
        if self.session.pipshown:
            self.session.pipshown = False
            del self.session.pip
            print >> log, "[AutoBouquetsMaker] Stopping PIP."

            # stop currently playing service if it is using a tuner in ("loopthrough", "satposdepends")
        currentlyPlayingNIM = None
        currentService = self.session and self.session.nav.getCurrentService()
        frontendInfo = currentService and currentService.frontendInfo()
        frontendData = frontendInfo and frontendInfo.getAll(True)
        if frontendData is not None:
            currentlyPlayingNIM = frontendData.get("tuner_number", None)
            if self.providers[self.currentAction]["streamtype"] == "dvbs" and currentlyPlayingNIM is not None:
                nimConfigMode = nimmanager.nim_slots[currentlyPlayingNIM].config_mode
                if nimConfigMode in ("loopthrough", "satposdepends"):
                    self.postScanService = self.session.nav.getCurrentlyPlayingServiceReference()
                    self.session.nav.stopService()
                    currentlyPlayingNIM = None
                    print >> log, "[AutoBouquetsMaker] The active service was using a %s tuner, so had to be stopped (slot id %s)." % (
                        nimConfigMode,
                        currentlyPlayingNIM,
                    )
        del frontendInfo
        del currentService

        current_slotid = -1
        if self.rawchannel:
            del (self.rawchannel)

        self.frontend = None
        self.rawchannel = None

        nimList.reverse()  # start from the last
        for slotid in nimList:
            if self.providers[self.currentAction]["streamtype"] == "dvbs":
                sats = nimmanager.getSatListForNim(slotid)
                for sat in sats:
                    if sat[0] == transponder["orbital_position"]:
                        if current_slotid == -1:  # mark the first valid slotid in case of no other one is free
                            current_slotid = slotid

                        self.rawchannel = resmanager.allocateRawChannel(slotid)
                        if self.rawchannel:
                            print >> log, "[AutoBouquetsMaker] Nim found on slot id %d with sat %s" % (slotid, sat[1])
                            current_slotid = slotid
                            break
            else:
                if current_slotid == -1:  # mark the first valid slotid in case of no other one is free
                    current_slotid = slotid
                self.rawchannel = resmanager.allocateRawChannel(slotid)
                if self.rawchannel:
                    print >> log, "[AutoBouquetsMaker] Nim found on slot id %d" % (slotid)
                    current_slotid = slotid
                    break

            if self.rawchannel:
                break

        if current_slotid == -1:
            print >> log, "[AutoBouquetsMaker] No valid NIM found"
            self.showError(_("No valid NIM found"))
            return

        if not self.rawchannel:
            # if we are here the only possible option is to close the active service
            if currentlyPlayingNIM in nimList:
                slotid = currentlyPlayingNIM
                if self.providers[self.currentAction]["streamtype"] == "dvbs":
                    sats = nimmanager.getSatListForNim(currentlyPlayingNIM)
                    for sat in sats:
                        if sat[0] == transponder["orbital_position"]:
                            print >> log, "[AutoBouquetsMaker] Nim found on slot id %d but it's busy. Stopping active service" % currentlyPlayingNIM
                            self.postScanService = self.session.nav.getCurrentlyPlayingServiceReference()
                            self.session.nav.stopService()
                            self.rawchannel = resmanager.allocateRawChannel(slotid)
                            break
                else:
                    print >> log, "[AutoBouquetsMaker] Nim found on slot id %d but it's busy. Stopping active service" % currentlyPlayingNIM
                    self.postScanService = self.session.nav.getCurrentlyPlayingServiceReference()
                    self.session.nav.stopService()
                    self.rawchannel = resmanager.allocateRawChannel(slotid)

            if not self.rawchannel:
                if self.session.nav.RecordTimer.isRecording():
                    print >> log, "[AutoBouquetsMaker] Cannot free NIM because a record is in progress"
                    self.showError(_("Cannot free NIM because a recording is in progress"))
                    return
                else:
                    print >> log, "[AutoBouquetsMaker] Cannot get the NIM"
                    self.showError(_("Cannot get the NIM"))
                    return

                    # set extended timeout for rotors
        if self.providers[self.currentAction]["streamtype"] == "dvbs" and self.isRotorSat(
            slotid, transponder["orbital_position"]
        ):
            self.LOCK_TIMEOUT = self.LOCK_TIMEOUT_ROTOR
            print >> log, "[AutoBouquetsMaker] Motorised dish. Will wait up to %i seconds for tuner lock." % (
                self.LOCK_TIMEOUT / 10
            )
        else:
            self.LOCK_TIMEOUT = self.LOCK_TIMEOUT_FIXED
            print >> log, "[AutoBouquetsMaker] Fixed dish. Will wait up to %i seconds for tuner lock." % (
                self.LOCK_TIMEOUT / 10
            )

        self.frontend = self.rawchannel.getFrontend()
        if not self.frontend:
            print >> log, "[AutoBouquetsMaker] Cannot get frontend"
            self.showError(_("Cannot get frontend"))
            return

        demuxer_id = self.rawchannel.reserveDemux()
        if demuxer_id < 0:
            print >> log, "[AutoBouquetsMaker] Cannot allocate the demuxer"
            self.showError(_("Cannot allocate the demuxer"))
            return

        if self.providers[self.currentAction]["streamtype"] == "dvbs":
            params = eDVBFrontendParametersSatellite()
            params.frequency = transponder["frequency"]
            params.symbol_rate = transponder["symbol_rate"]
            params.polarisation = transponder["polarization"]
            params.fec = transponder["fec_inner"]
            params.inversion = transponder["inversion"]
            params.orbital_position = transponder["orbital_position"]
            params.system = transponder["system"]
            params.modulation = transponder["modulation"]
            params.rolloff = transponder["roll_off"]
            params.pilot = transponder["pilot"]
            params_fe = eDVBFrontendParameters()
            params_fe.setDVBS(params, False)

        elif self.providers[self.currentAction]["streamtype"] == "dvbt":
            params = eDVBFrontendParametersTerrestrial()
            params.frequency = transponder["frequency"]
            params.bandwidth = transponder["bandwidth"]
            params.code_rate_hp = transponder["code_rate_hp"]
            params.code_rate_lp = transponder["code_rate_lp"]
            params.inversion = transponder["inversion"]
            params.system = transponder["system"]
            params.modulation = transponder["modulation"]
            params.transmission_mode = transponder["transmission_mode"]
            params.guard_interval = transponder["guard_interval"]
            params.hierarchy = transponder["hierarchy"]
            params_fe = eDVBFrontendParameters()
            params_fe.setDVBT(params)

        elif self.providers[self.currentAction]["streamtype"] == "dvbc":
            params = eDVBFrontendParametersCable()
            params.frequency = transponder["frequency"]
            params.symbol_rate = transponder["symbol_rate"]
            params.fec_inner = transponder["fec_inner"]
            params.inversion = transponder["inversion"]
            params.modulation = transponder["modulation"]
            params_fe = eDVBFrontendParameters()
            params_fe.setDVBC(params)

        self.rawchannel.requestTsidOnid()
        self.frontend.tune(params_fe)
        self.manager.setAdapter(0)  # FIX: use the correct device
        self.manager.setDemuxer(demuxer_id)
        self.manager.setFrontend(current_slotid)

        self.lockcounter = 0
        self.locktimer = eTimer()
        self.locktimer.callback.append(self.checkTunerLock)
        self.locktimer.start(100, 1)
	def doTune(self):
		from Screens.Standby import inStandby
		transponder = self.providers[self.currentAction]["transponder"]
		nimList = nimmanager.getNimListOfType("DVB-S")
		if len(nimList) == 0:
			print>>log, "[AutoBouquetsMaker] No DVB-S NIMs founds"
			self.showError(_('No DVB-S NIMs founds'))
			return

		resmanager = eDVBResourceManager.getInstance()
		if not resmanager:
			print>>log, "[AutoBouquetsMaker] Cannot retrieve Resource Manager instance"
			self.showError(_('Cannot retrieve Resource Manager instance'))
			return

		print>>log, "[AutoBouquetsMaker] Search NIM for orbital position %d" % transponder["orbital_position"]
		current_slotid = -1
		if self.rawchannel:
			del(self.rawchannel)

		self.frontend = None
		self.rawchannel = None

		nimList.reverse() # start from the last
		for slotid in nimList:
			sats = nimmanager.getSatListForNim(slotid)
			for sat in sats:
				if sat[0] == transponder["orbital_position"]:
					if current_slotid == -1:	# mark the first valid slotid in case of no other one is free
						current_slotid = slotid

					self.rawchannel = resmanager.allocateRawChannel(slotid)
					if self.rawchannel:
						print>>log, "[AutoBouquetsMaker] Nim found on slot id %d with sat %s" % (slotid, sat[1])
						current_slotid = slotid
						break

			if self.rawchannel:
				break

		if current_slotid == -1:
			print>>log, "[AutoBouquetsMaker] No valid NIM found"
			self.showError(_('No valid NIM found'))
			return

		if not self.rawchannel:
			print>>log, "[AutoBouquetsMaker] Nim found on slot id %d but it's busy. Stop current service" % current_slotid
			if self.session.nav.RecordTimer.isRecording():
				print>>log, "[AutoBouquetsMaker] Cannot free NIM because a record is in progress"
				self.showError(_('Cannot free NIM because a record is in progress'))
				return

			self.postScanService = self.session.nav.getCurrentlyPlayingServiceReference()
			self.session.nav.stopService()
			if self.session.pipshown:
				self.session.pipshown = False

			self.rawchannel = resmanager.allocateRawChannel(current_slotid)
			if not self.rawchannel:
				print>>log, "[AutoBouquetsMaker] Cannot get the NIM"
				self.showError(_('Cannot get the NIM'))
				return

		self.frontend = self.rawchannel.getFrontend()
		if not self.frontend:
			print>>log, "[AutoBouquetsMaker] Cannot get frontend"
			self.showError(_('Cannot get frontend'))
			return

		demuxer_id = self.rawchannel.reserveDemux()
		if demuxer_id < 0:
			print>>log, "[AutoBouquetsMaker] Cannot allocate the demuxer"
			self.showError(_('Cannot allocate the demuxer'))
			return

		params = eDVBFrontendParametersSatellite()
		params.frequency = transponder["frequency"]
		params.symbol_rate = transponder["symbol_rate"]
		params.polarisation = transponder["polarization"]
		params.fec = transponder["fec_inner"]
		params.inversion = transponder["inversion"]
		params.orbital_position = transponder["orbital_position"]
		params.system = transponder["system"]
		params.modulation = transponder["modulation"]
		params.rolloff = transponder["roll_off"]
		params.pilot = transponder["pilot"]
		params_fe = eDVBFrontendParameters()
		params_fe.setDVBS(params, False)
		self.rawchannel.requestTsidOnid()
		self.frontend.tune(params_fe)
		self.manager.setAdapter(0)	# FIX: use the correct device
		self.manager.setDemuxer(demuxer_id)
		self.manager.setFrontend(current_slotid)

		self.lockcounter = 0
		self.locktimer = eTimer()
		self.locktimer.callback.append(self.checkTunerLock)
		self.locktimer.start(100, 1)
Exemple #34
0
    def doTune(self):
        from Screens.Standby import inStandby
        if self.providers[self.currentAction]["streamtype"] == "dvbs":
            transponder = self.providers[self.currentAction]["transponder"]
        else:
            bouquet_key = None
            providers_tmp = config.autobouquetsmaker.providers.value.split("|")
            for provider_tmp in providers_tmp:
                provider_config = ProviderConfig(provider_tmp)
                provider_key = provider_config.getProvider()
                if self.currentAction != provider_key:
                    continue
                bouquet_key = provider_config.getArea()

            if not bouquet_key:
                print >> log, "[AutoBouquetsMaker] No area found"
                self.showError(_('No area found'))
                return

            transponder = self.providers[
                self.currentAction]["bouquets"][bouquet_key]

        nimList = []
        for nim in nimmanager.nim_slots:
            if (nim.config_mode not in
                ("loopthrough", "satposdepends", "nothing")) and (
                    (self.providers[self.currentAction]["streamtype"] == "dvbs"
                     and nim.isCompatible("DVB-S")) or
                    (self.providers[self.currentAction]["streamtype"] == "dvbc"
                     and nim.isCompatible("DVB-C")) or
                    (self.providers[self.currentAction]["streamtype"] == "dvbt"
                     and nim.isCompatible("DVB-T"))):
                nimList.append(nim.slot)
        if len(nimList) == 0:
            print >> log, "[AutoBouquetsMaker] No NIMs found"
            self.showError(_('No NIMs found'))
            return

        resmanager = eDVBResourceManager.getInstance()
        if not resmanager:
            print >> log, "[AutoBouquetsMaker] Cannot retrieve Resource Manager instance"
            self.showError(_('Cannot retrieve Resource Manager instance'))
            return

        if self.providers[self.currentAction]["streamtype"] == "dvbs":
            print >> log, "[AutoBouquetsMaker] Search NIM for orbital position %d" % transponder[
                "orbital_position"]
        else:
            print >> log, "[AutoBouquetsMaker] Search NIM"

        # stop pip if running
        if self.session.pipshown:
            self.session.pipshown = False
            del self.session.pip
            print >> log, "[AutoBouquetsMaker] Stopping PIP."

        # stop currently playing service if it is using a tuner in ("loopthrough", "satposdepends")
        currentlyPlayingNIM = None
        currentService = self.session and self.session.nav.getCurrentService()
        frontendInfo = currentService and currentService.frontendInfo()
        frontendData = frontendInfo and frontendInfo.getAll(True)
        if frontendData is not None:
            currentlyPlayingNIM = frontendData.get("tuner_number", None)
            if self.providers[self.currentAction][
                    "streamtype"] == "dvbs" and currentlyPlayingNIM is not None:
                nimConfigMode = nimmanager.nim_slots[
                    currentlyPlayingNIM].config_mode
                if nimConfigMode in ("loopthrough", "satposdepends"):
                    self.postScanService = self.session.nav.getCurrentlyPlayingServiceReference(
                    )
                    self.session.nav.stopService()
                    currentlyPlayingNIM = None
                    print >> log, "[AutoBouquetsMaker] The active service was using a %s tuner, so had to be stopped (slot id %s)." % (
                        nimConfigMode, currentlyPlayingNIM)
        del frontendInfo
        del currentService

        current_slotid = -1
        if self.rawchannel:
            del (self.rawchannel)

        self.frontend = None
        self.rawchannel = None

        nimList.reverse()  # start from the last
        for slotid in nimList:
            if self.providers[self.currentAction]["streamtype"] == "dvbs":
                sats = nimmanager.getSatListForNim(slotid)
                for sat in sats:
                    if sat[0] == transponder["orbital_position"]:
                        if current_slotid == -1:  # mark the first valid slotid in case of no other one is free
                            current_slotid = slotid

                        self.rawchannel = resmanager.allocateRawChannel(slotid)
                        if self.rawchannel:
                            print >> log, "[AutoBouquetsMaker] Nim found on slot id %d with sat %s" % (
                                slotid, sat[1])
                            current_slotid = slotid
                            break
            else:
                if current_slotid == -1:  # mark the first valid slotid in case of no other one is free
                    current_slotid = slotid
                self.rawchannel = resmanager.allocateRawChannel(slotid)
                if self.rawchannel:
                    print >> log, "[AutoBouquetsMaker] Nim found on slot id %d" % (
                        slotid)
                    current_slotid = slotid
                    break

            if self.rawchannel:
                break

        if current_slotid == -1:
            print >> log, "[AutoBouquetsMaker] No valid NIM found"
            self.showError(_('No valid NIM found'))
            return

        if not self.rawchannel:
            # if we are here the only possible option is to close the active service
            if currentlyPlayingNIM in nimList:
                slotid = currentlyPlayingNIM
                if self.providers[self.currentAction]["streamtype"] == "dvbs":
                    sats = nimmanager.getSatListForNim(currentlyPlayingNIM)
                    for sat in sats:
                        if sat[0] == transponder["orbital_position"]:
                            print >> log, "[AutoBouquetsMaker] Nim found on slot id %d but it's busy. Stopping active service" % currentlyPlayingNIM
                            self.postScanService = self.session.nav.getCurrentlyPlayingServiceReference(
                            )
                            self.session.nav.stopService()
                            self.rawchannel = resmanager.allocateRawChannel(
                                slotid)
                            break
                else:
                    print >> log, "[AutoBouquetsMaker] Nim found on slot id %d but it's busy. Stopping active service" % currentlyPlayingNIM
                    self.postScanService = self.session.nav.getCurrentlyPlayingServiceReference(
                    )
                    self.session.nav.stopService()
                    self.rawchannel = resmanager.allocateRawChannel(slotid)

            if not self.rawchannel:
                if self.session.nav.RecordTimer.isRecording():
                    print >> log, "[AutoBouquetsMaker] Cannot free NIM because a record is in progress"
                    self.showError(
                        _('Cannot free NIM because a recording is in progress')
                    )
                    return
                else:
                    print >> log, "[AutoBouquetsMaker] Cannot get the NIM"
                    self.showError(_('Cannot get the NIM'))
                    return

        # set extended timeout for rotors
        if self.providers[self.currentAction][
                "streamtype"] == "dvbs" and self.isRotorSat(
                    slotid, transponder["orbital_position"]):
            self.LOCK_TIMEOUT = self.LOCK_TIMEOUT_ROTOR
            print >> log, "[AutoBouquetsMaker] Motorised dish. Will wait up to %i seconds for tuner lock." % (
                self.LOCK_TIMEOUT / 10)
        else:
            self.LOCK_TIMEOUT = self.LOCK_TIMEOUT_FIXED
            print >> log, "[AutoBouquetsMaker] Fixed dish. Will wait up to %i seconds for tuner lock." % (
                self.LOCK_TIMEOUT / 10)

        self.frontend = self.rawchannel.getFrontend()
        if not self.frontend:
            print >> log, "[AutoBouquetsMaker] Cannot get frontend"
            self.showError(_('Cannot get frontend'))
            return

        demuxer_id = self.rawchannel.reserveDemux()
        if demuxer_id < 0:
            print >> log, "[AutoBouquetsMaker] Cannot allocate the demuxer"
            self.showError(_('Cannot allocate the demuxer'))
            return

        if self.providers[self.currentAction]["streamtype"] == "dvbs":
            params = eDVBFrontendParametersSatellite()
            params.frequency = transponder["frequency"]
            params.symbol_rate = transponder["symbol_rate"]
            params.polarisation = transponder["polarization"]
            params.fec = transponder["fec_inner"]
            params.inversion = transponder["inversion"]
            params.orbital_position = transponder["orbital_position"]
            params.system = transponder["system"]
            params.modulation = transponder["modulation"]
            params.rolloff = transponder["roll_off"]
            params.pilot = transponder["pilot"]
            params_fe = eDVBFrontendParameters()
            params_fe.setDVBS(params, False)

        elif self.providers[self.currentAction]["streamtype"] == "dvbt":
            params = eDVBFrontendParametersTerrestrial()
            params.frequency = transponder["frequency"]
            params.bandwidth = transponder["bandwidth"]
            params.code_rate_hp = transponder["code_rate_hp"]
            params.code_rate_lp = transponder["code_rate_lp"]
            params.inversion = transponder["inversion"]
            params.system = transponder["system"]
            params.modulation = transponder["modulation"]
            params.transmission_mode = transponder["transmission_mode"]
            params.guard_interval = transponder["guard_interval"]
            params.hierarchy = transponder["hierarchy"]
            params_fe = eDVBFrontendParameters()
            params_fe.setDVBT(params)

        elif self.providers[self.currentAction]["streamtype"] == "dvbc":
            params = eDVBFrontendParametersCable()
            params.frequency = transponder["frequency"]
            params.symbol_rate = transponder["symbol_rate"]
            params.fec_inner = transponder["fec_inner"]
            params.inversion = transponder["inversion"]
            params.modulation = transponder["modulation"]
            params_fe = eDVBFrontendParameters()
            params_fe.setDVBC(params)

        self.rawchannel.requestTsidOnid()
        self.frontend.tune(params_fe)
        self.manager.setAdapter(0)  # FIX: use the correct device
        self.manager.setDemuxer(demuxer_id)
        self.manager.setFrontend(current_slotid)

        self.lockcounter = 0
        self.locktimer = eTimer()
        self.locktimer.callback.append(self.checkTunerLock)
        self.locktimer.start(100, 1)
	def StatusAppContainerDataAvail(self, str):

		enigma_system = {
			"DVB-S":	eDVBFrontendParametersSatellite.System_DVB_S,
			"DVB-S2":	eDVBFrontendParametersSatellite.System_DVB_S2
		}

		enigma_modulation = {
			"QPSK":	eDVBFrontendParametersSatellite.Modulation_QPSK,
			"8PSK":	eDVBFrontendParametersSatellite.Modulation_8PSK
		}

		enigma_inversion =	{
			"INVERSION_OFF":	eDVBFrontendParametersSatellite.Inversion_Off,
			"INVERSION_ON":		eDVBFrontendParametersSatellite.Inversion_On,
			"INVERSION_AUTO":	eDVBFrontendParametersSatellite.Inversion_Unknown
		}

		enigma_fec = {
			"FEC_AUTO":	eDVBFrontendParametersSatellite.FEC_Auto,
			"FEC_1_2":	eDVBFrontendParametersSatellite.FEC_1_2,
			"FEC_2_3":	eDVBFrontendParametersSatellite.FEC_2_3,
			"FEC_3_4":	eDVBFrontendParametersSatellite.FEC_3_4,
			"FEC_5_6":	eDVBFrontendParametersSatellite.FEC_5_6,
			"FEC_7_8":	eDVBFrontendParametersSatellite.FEC_7_8,
			"FEC_8_9":	eDVBFrontendParametersSatellite.FEC_8_9,
			"FEC_3_5":	eDVBFrontendParametersSatellite.FEC_3_5,
			"FEC_9_10":	eDVBFrontendParametersSatellite.FEC_9_10,
			"FEC_NONE":	eDVBFrontendParametersSatellite.FEC_None
		}

		enigma_rollof = {
			"ROLLOFF_20":	eDVBFrontendParametersSatellite.RollOff_alpha_0_20,
			"ROLLOFF_25":	eDVBFrontendParametersSatellite.RollOff_alpha_0_25,
			"ROLLOFF_35":	eDVBFrontendParametersSatellite.RollOff_alpha_0_35
		}

		enigma_pilot = {
			"PILOT_ON":		eDVBFrontendParametersSatellite.Pilot_On,
			"PILOT_OFF":	eDVBFrontendParametersSatellite.Pilot_Off
		}

		parent = self.parent

		for line in str.splitlines():
			#print "-->", line, "<--"

			if line.startswith("OK"):
				data = line.split()
				print "cnt:", len(data), ", data:", data

				if len(data) >= 10 and data[0] == "OK":
					try:
						if parent.vuplus_quirks and data[7] == "FEC_3_4":
							fec = "FEC_AUTO"
						else:
							fec = data[7]

						transponder						= eDVBFrontendParametersSatellite()
						transponder.orbital_position	= parent.position
						transponder.polarisation		= parent.PolarisationToEnigma(parent.polarisation)
						transponder.frequency			= int(data[2])
						transponder.symbol_rate			= int(data[3])
						transponder.system				= enigma_system[data[4]]
						transponder.inversion			= enigma_inversion[data[5]]
						transponder.pilot				= enigma_pilot[data[6]]
						transponder.fec					= enigma_fec[fec]
						transponder.modulation			= enigma_modulation[data[8]]
						transponder.rolloff				= enigma_rollof[data[9]]
						parent.enigma_transponders.append(transponder)

						raw_transponder					= {}
						raw_transponder["pos"]			= parent.PositionToString(parent.position)
						raw_transponder["freq"]			= int(data[2])
						raw_transponder["pol"]			= parent.PolarisationToString(parent.polarisation)
						raw_transponder["system"]		= data[4]
						raw_transponder["mod"]			= data[8]
						raw_transponder["sr"]			= int(data[3])
						raw_transponder["fec"]			= fec
						raw_transponder["inv"]			= data[5]
						raw_transponder["pilot"]		= data[6]
						raw_transponder["rolloff"]		= data[9]
						parent.text_transponders.append(raw_transponder)

						xml_transponder					= {}
						xml_transponder["freq"]			= round(int(data[2]) / 1000) * 1000
						xml_transponder["sr"]			= round(int(data[3]) / 1000) * 1000
						xml_transponder["pol"]			= parent.PolarisationToEnigma(parent.polarisation)
						xml_transponder["fec"]			= enigma_fec[fec] + 1
						xml_transponder["system"]		= enigma_system[data[4]]
						xml_transponder["mod"]			= enigma_modulation[data[8]]
						parent.xml_transponders.append(xml_transponder)

						message = "found: %d %s %s %s %d %s\n" % (int(data[2]) / 1000, \
								parent.PolarisationToShortString(parent.polarisation), data[4], \
								data[8], int(data[3]) / 1000, fec)

					except:
						message = "invalid data: " + line + "\n"
						pass
				else:
					message = "invalid data: " + line + "\n"
			else:
				message = line + "\n"

			self.log = message + self.log
			self["info"].setText(self.log)

			parent.logfile.write(time.strftime("%Y/%m/%d %H:%M:%S: ") + message)

			parent.progress = parent.progress + 2
			self["scan_progress"].setValue(parent.progress)
Exemple #36
0
	def frontendStateChanged(self):
	    state = []
	    state = self.frontend.getState()
#	    print "State=", state[1]
	    if state[1] > 1:
		x = { }
		self.frontend.getFrontendStatus(x)
		assert x, "getFrontendStatus failed!"
		if x["tuner_state"] in ("LOCKED", "FAILED", "LOSTLOCK"):
			state = self.satellite_search_session

			d = { }
			self.frontend.getTransponderData(d, False)
			d["tuner_type"] = 'DVB-S'
			r = ConvertToHumanReadable(d)

			if x["tuner_state"] == "LOCKED":
				freq = d["frequency"]
				parm = eDVBFrontendParametersSatellite()
				parm.frequency = int(round(float(freq*2) / 1000)) * 1000
				parm.frequency /= 2
				fstr = str(parm.frequency)
				if self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Horizontal:
					fstr += "H KHz SR"
				elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Vertical:
					fstr += "V KHz SR"
				elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularLeft:
					fstr += "L KHz SR"
				elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularRight:
					fstr += "R KHz SR"
				sr = d["symbol_rate"]
#				print "SR before round", sr
				if sr < 0:
					print "WARNING blind SR is < 0... skip"
					self.parm.frequency += self.parm.symbol_rate
				else:
					sr_rounded = round(float(sr*2L) / 1000) * 1000
					sr_rounded /= 2
#					print "SR after round", sr_rounded
					parm.symbol_rate = int(sr_rounded)
					fstr += str(parm.symbol_rate/1000)
					parm.fec = d["fec_inner"]
					fstr += " "
					fstr += r["fec_inner"]
					parm.inversion = d["inversion"]
					parm.polarisation = d["polarization"]
					parm.orbital_position = d["orbital_position"]
					parm.system = d["system"]
					fstr += " "
					fstr += r["system"]
					parm.modulation = d["modulation"]
					fstr += " "
					fstr += r["modulation"]

					if parm.system == eDVBFrontendParametersSatellite.System_DVB_S2:
						parm.rolloff = d["rolloff"]
						parm.pilot = d["pilot"]
						parm.is_id = d["is_id"]
						parm.pls_mode = d["pls_mode"]
					self.__tlist.append(parm)

					print "LOCKED at", freq, "SEARCHED at", self.parm.frequency, "half bw", (135L*((sr+1000)/1000)/200), "half search range", (self.parm.symbol_rate/2)
					self.parm.frequency = freq
					self.parm.frequency += (135L*((sr+999)/1000)/200)
					self.parm.frequency += self.parm.symbol_rate/2

					bm = state.getConstellationBitmap(5)
					self.tp_found.append((fstr, bm))
					state.updateConstellation(bm)

					if len(self.tp_found):
						state["list"].updateList(self.tp_found)
					else:
						state["list"].setList(self.tp_found)
						state["list"].setIndex(0)
			else:
				self.parm.frequency += self.parm.symbol_rate

			print "NEXT freq", self.parm.frequency

			mhz_complete, mhz_done = self.stats()
			seconds_done = int(time() - self.start_time)

			if self.parm.frequency > self.range_list[self.current_range][1]:
				self.parm = self.setNextRange()
				if self.parm is not None:
					tparm = eDVBFrontendParameters()
					tparm.setDVBS(self.parm, False)
					self.frontend.tune(tparm)
				else:
					tmpstr = _("%dMHz scanned") %mhz_complete
					tmpstr += ', '
					tmpstr += _("%d transponders found at %d:%02dmin") %(len(self.tp_found),seconds_done / 60, seconds_done % 60)
					state["progress"].setText(tmpstr)
					state.setFinished()
#					self.frontend.getStateChangeSignal().remove(self.frontendStateChanged)
					self.frontend = None
					self.channel = None
					return

			tmpstr = str((self.parm.frequency+500)/1000)
			if self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Horizontal:
				tmpstr += "H"
			elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Vertical:
				tmpstr += "V"
			elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularLeft:
				tmpstr += "L"
			elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularRight:
				tmpstr += "R"

			tmpstr += ', '
			tmpstr += "%d/%dMHz" %(mhz_done, mhz_complete)

			tmpstr += ", "
			tmpstr += _("%d transponder(s) found") %len(self.tp_found)

			tmpstr += ', '

			seconds_complete = (seconds_done * mhz_complete) / mhz_done
			tmpstr += _("%d:%02d/%d:%02dmin") %(seconds_done / 60, seconds_done % 60, seconds_complete / 60, seconds_complete % 60)

			state["progress"].setText(tmpstr)

			self.tuneNext()
		else:
			print "unhandled tuner state", x["tuner_state"]
	    self.timer.start(500, True)
	def frontendStateChanged(self):
		if self.frontend is None:
			self.timer.start(5000, True)
			return
		x = { }
		self.frontend.getFrontendStatus(x)
		assert x, "getFrontendStatus failed!"
		if x["tuner_state"] in ("LOCKED", "FAILED", "LOSTLOCK"):
			state = self.satellite_search_session

			d = { }
			self.frontend.getTransponderData(d, False)
			d["tuner_type"] = 'DVB-S'
			r = ConvertToHumanReadable(d)

			if x["tuner_state"] == "LOCKED":
				freq = d["frequency"]
				parm = eDVBFrontendParametersSatellite()
				parm.frequency = int(round(float(freq*2) / 1000)) * 1000
				parm.frequency /= 2
				fstr = str(parm.frequency)
				if self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Horizontal:
					fstr += "H KHz SR"
				elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Vertical:
					fstr += "V KHz SR"
				elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularLeft:
					fstr += "L KHz SR"
				elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularRight:
					fstr += "R KHz SR"
				sr = d["symbol_rate"]
				if sr < 0:
					print "WARNING blind SR is < 0... skip"
					if not self.auto_scan:
						self.parm.frequency += self.parm.symbol_rate
				else:
					sr_rounded = round(float(sr*2L) / 1000) * 1000
					sr_rounded /= 2
					parm.symbol_rate = int(sr_rounded)
					fstr += str(parm.symbol_rate/1000)
					parm.fec = d["fec_inner"]
					fstr += " "
					fstr += r["fec_inner"]
					parm.inversion = eDVBFrontendParametersSatellite.Inversion_Unknown
					parm.polarisation = d["polarization"]
					parm.orbital_position = d["orbital_position"]
					parm.system = d["system"]
					fstr += " "
					fstr += r["system"]
					parm.modulation = d["modulation"]
					fstr += " "
					fstr += r["modulation"]

					if parm.system == eDVBFrontendParametersSatellite.System_DVB_S2:
						parm.rolloff = d["rolloff"]
						parm.pilot = d["pilot"]
					self.__tlist.append(parm)
					if self.auto_scan:
						print "LOCKED at", freq
					else:
						print "LOCKED at", freq, "SEARCHED at", self.parm.frequency, "half bw", (135L*((sr+1000)/1000)/200), "half search range", (self.parm.symbol_rate/2)
						self.parm.frequency = freq
						self.parm.frequency += (135L*((sr+999)/1000)/200)
						self.parm.frequency += self.parm.symbol_rate/2

					bm = state.getConstellationBitmap(5)
					self.tp_found.append((fstr, bm))
					state.updateConstellation(bm)

					if len(self.tp_found):
						state["list"].updateList(self.tp_found)
					else:
						state["list"].setList(self.tp_found)
						state["list"].setIndex(0)
			else:
				if self.auto_scan: #when driver based auto scan is used we got a tuneFailed event when the scan has scanned the last frequency...
					self.parm = self.setNextRange()
				else:
					self.parm.frequency += self.parm.symbol_rate

			if self.auto_scan:
				freq = d["frequency"]
				freq = int(round(float(freq*2) / 1000)) * 1000
				freq /= 2
				mhz_complete, mhz_done = self.stats(freq)
				print "CURRENT freq", freq, "%d/%d" %(mhz_done, mhz_complete)
				check_finished = self.parm is None
			else:
				print "NEXT freq", self.parm.frequency
				mhz_complete, mhz_done = self.stats()
				check_finished = self.parm.frequency > self.range_list[self.current_range][1]
				if check_finished:
					self.parm = self.setNextRange()

			seconds_done = int(time() - self.start_time)

			if check_finished:
				if self.parm is None:
					tmpstr = _("%dMHz scanned") % mhz_complete
					tmpstr += ', '
					tmpstr += _("%d transponders found at %d:%02d min") %(len(self.tp_found),seconds_done / 60, seconds_done % 60)
					state["progress"].setText(tmpstr)
					state.setFinished()
					self.frontend = None
					self.channel = None
					return

			if self.auto_scan:
				tmpstr = str((freq+500)/1000)
			else:
				tmpstr = str((self.parm.frequency+500)/1000)

			if self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Horizontal:
				tmpstr += "H"
			elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Vertical:
				tmpstr += "V"
			elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularLeft:
				tmpstr += "L"
			elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularRight:
				tmpstr += "R"

			tmpstr += ', '
			tmpstr += "%d/%dMhz" %(mhz_done, mhz_complete)

			tmpstr += ", "
			tmpstr += _("%d transponder(s) found") %len(self.tp_found)

			tmpstr += ', '

			seconds_complete = (seconds_done * mhz_complete) / max(mhz_done, 1)
			tmpstr += _("%d:%02d/%d:%02dmin") %(seconds_done / 60, seconds_done % 60, seconds_complete / 60, seconds_complete % 60)

			state["progress"].setText(tmpstr)

			self.tuneNext()
		else:
			print "unhandled tuner state", x["tuner_state"]
		self.timer.start(1500, True)
Exemple #38
0
    def doTune(self):
        from Screens.Standby import inStandby
        if self.providers[self.currentAction]["streamtype"] == "dvbs":
            transponder = self.providers[self.currentAction]["transponder"]
        else:
            bouquet_key = None
            providers_tmp = config.autobouquetsmaker.providers.value.split("|")
            for provider_tmp in providers_tmp:
                provider_config = ProviderConfig(provider_tmp)
                provider_key = provider_config.getProvider()
                if self.currentAction != provider_key:
                    continue
                bouquet_key = provider_config.getArea()

            if not bouquet_key:
                print >> log, "[AutoBouquetsMaker] No area found"
                self.showError(_('No area found'))
                return

            transponder = self.providers[
                self.currentAction]["bouquets"][bouquet_key]

        nimList = []
        for nim in nimmanager.nim_slots:
            if (self.providers[self.currentAction]["streamtype"] == "dvbs"
                    and nim.isCompatible("DVB-S")
                    and nim.config_mode not in ("loopthrough")) or (
                        self.providers[self.currentAction]["streamtype"]
                        == "dvbc" and nim.isCompatible("DVB-C")) or (
                            self.providers[self.currentAction]["streamtype"]
                            == "dvbt" and nim.isCompatible("DVB-T")):
                nimList.append(nim.slot)
        if len(nimList) == 0:
            print >> log, "[AutoBouquetsMaker] No NIMs found"
            self.showError(_('No NIMs found'))
            return

        resmanager = eDVBResourceManager.getInstance()
        if not resmanager:
            print >> log, "[AutoBouquetsMaker] Cannot retrieve Resource Manager instance"
            self.showError(_('Cannot retrieve Resource Manager instance'))
            return

        if self.providers[self.currentAction]["streamtype"] == "dvbs":
            print >> log, "[AutoBouquetsMaker] Search NIM for orbital position %d" % transponder[
                "orbital_position"]
        else:
            print >> log, "[AutoBouquetsMaker] Search NIM"

        current_slotid = -1
        if self.rawchannel:
            del (self.rawchannel)

        self.frontend = None
        self.rawchannel = None

        nimList.reverse()  # start from the last
        for slotid in nimList:
            if self.providers[self.currentAction]["streamtype"] == "dvbs":
                sats = nimmanager.getSatListForNim(slotid)
                for sat in sats:
                    if sat[0] == transponder["orbital_position"]:
                        if current_slotid == -1:  # mark the first valid slotid in case of no other one is free
                            current_slotid = slotid

                        self.rawchannel = resmanager.allocateRawChannel(slotid)
                        if self.rawchannel:
                            print >> log, "[AutoBouquetsMaker] Nim found on slot id %d with sat %s" % (
                                slotid, sat[1])
                            current_slotid = slotid
                            break
            else:
                if current_slotid == -1:  # mark the first valid slotid in case of no other one is free
                    current_slotid = slotid
                self.rawchannel = resmanager.allocateRawChannel(slotid)
                if self.rawchannel:
                    print >> log, "[AutoBouquetsMaker] Nim found on slot id %d" % (
                        slotid)
                    current_slotid = slotid
                    break

            if self.rawchannel:
                break

        if current_slotid == -1:
            print >> log, "[AutoBouquetsMaker] No valid NIM found"
            self.showError(_('No valid NIM found'))
            return

        if not self.rawchannel:
            print >> log, "[AutoBouquetsMaker] Nim found on slot id %d but it's busy. Stop current service" % current_slotid
            if self.session.nav.RecordTimer.isRecording():
                print >> log, "[AutoBouquetsMaker] Cannot free NIM because a record is in progress"
                self.showError(
                    _('Cannot free NIM because a record is in progress'))
                return

            self.postScanService = self.session.nav.getCurrentlyPlayingServiceReference(
            )
            self.session.nav.stopService()
            if self.session.pipshown:
                self.session.pipshown = False

            self.rawchannel = resmanager.allocateRawChannel(current_slotid)
            if not self.rawchannel:
                print >> log, "[AutoBouquetsMaker] Cannot get the NIM"
                self.showError(_('Cannot get the NIM'))
                return

        self.frontend = self.rawchannel.getFrontend()
        if not self.frontend:
            print >> log, "[AutoBouquetsMaker] Cannot get frontend"
            self.showError(_('Cannot get frontend'))
            return

        demuxer_id = self.rawchannel.reserveDemux()
        if demuxer_id < 0:
            print >> log, "[AutoBouquetsMaker] Cannot allocate the demuxer"
            self.showError(_('Cannot allocate the demuxer'))
            return

        if self.providers[self.currentAction]["streamtype"] == "dvbs":
            params = eDVBFrontendParametersSatellite()
            params.frequency = transponder["frequency"]
            params.symbol_rate = transponder["symbol_rate"]
            params.polarisation = transponder["polarization"]
            params.fec = transponder["fec_inner"]
            params.inversion = transponder["inversion"]
            params.orbital_position = transponder["orbital_position"]
            params.system = transponder["system"]
            params.modulation = transponder["modulation"]
            params.rolloff = transponder["roll_off"]
            params.pilot = transponder["pilot"]
            params_fe = eDVBFrontendParameters()
            params_fe.setDVBS(params, False)

        elif self.providers[self.currentAction]["streamtype"] == "dvbt":
            params = eDVBFrontendParametersTerrestrial()
            params.frequency = transponder["frequency"]
            params.bandwidth = transponder["bandwidth"]
            params.code_rate_hp = transponder["code_rate_hp"]
            params.code_rate_lp = transponder["code_rate_lp"]
            params.inversion = transponder["inversion"]
            params.system = transponder["system"]
            params.modulation = transponder["modulation"]
            params.transmission_mode = transponder["transmission_mode"]
            params.guard_interval = transponder["guard_interval"]
            params.hierarchy = transponder["hierarchy"]
            params_fe = eDVBFrontendParameters()
            params_fe.setDVBT(params)

        elif self.providers[self.currentAction]["streamtype"] == "dvbc":
            params = eDVBFrontendParametersCable()
            params.frequency = transponder["frequency"]
            params.symbol_rate = transponder["symbol_rate"]
            params.fec_inner = transponder["fec_inner"]
            params.inversion = transponder["inversion"]
            params.modulation = transponder["modulation"]
            params_fe = eDVBFrontendParameters()
            params_fe.setDVBC(params)

        self.rawchannel.requestTsidOnid()
        self.frontend.tune(params_fe)
        self.manager.setAdapter(0)  # FIX: use the correct device
        self.manager.setDemuxer(demuxer_id)
        self.manager.setFrontend(current_slotid)

        self.lockcounter = 0
        self.locktimer = eTimer()
        self.locktimer.callback.append(self.checkTunerLock)
        self.locktimer.start(100, 1)
Exemple #39
0
	def doTune(self):
		from Screens.Standby import inStandby
		if self.providers[self.currentAction]["streamtype"] == "dvbs":
			transponder = self.providers[self.currentAction]["transponder"]
		else:
			bouquet_key = None
			providers_tmp = config.autobouquetsmaker.providers.value.split("|")
			for provider_tmp in providers_tmp:
				provider_config = ProviderConfig(provider_tmp)
				provider_key = provider_config.getProvider()
				if self.currentAction != provider_key:
					continue
				bouquet_key = provider_config.getArea()

			if not bouquet_key:
				print>>log, "[AutoBouquetsMaker] No area found"
				self.showError(_('No area found'))
				return
			
			transponder = self.providers[self.currentAction]["bouquets"][bouquet_key]

		nimList = []
		for nim in nimmanager.nim_slots:
			if (self.providers[self.currentAction]["streamtype"] == "dvbs" and nim.isCompatible("DVB-S") and nim.config_mode not in ("loopthrough")) or (self.providers[self.currentAction]["streamtype"] == "dvbc" and nim.isCompatible("DVB-C")) or (self.providers[self.currentAction]["streamtype"] == "dvbt" and nim.isCompatible("DVB-T")):
				nimList.append(nim.slot)
		if len(nimList) == 0:
			print>>log, "[AutoBouquetsMaker] No NIMs found"
			self.showError(_('No NIMs found'))
			return

		resmanager = eDVBResourceManager.getInstance()
		if not resmanager:
			print>>log, "[AutoBouquetsMaker] Cannot retrieve Resource Manager instance"
			self.showError(_('Cannot retrieve Resource Manager instance'))
			return

		if self.providers[self.currentAction]["streamtype"] == "dvbs":
			print>>log, "[AutoBouquetsMaker] Search NIM for orbital position %d" % transponder["orbital_position"]
		else:
			print>>log, "[AutoBouquetsMaker] Search NIM"

		current_slotid = -1
		if self.rawchannel:
			del(self.rawchannel)

		self.frontend = None
		self.rawchannel = None

		nimList.reverse() # start from the last
		for slotid in nimList:
			if self.providers[self.currentAction]["streamtype"] == "dvbs":
				sats = nimmanager.getSatListForNim(slotid)
				for sat in sats:
					if sat[0] == transponder["orbital_position"]:
						if current_slotid == -1:	# mark the first valid slotid in case of no other one is free
							current_slotid = slotid

						self.rawchannel = resmanager.allocateRawChannel(slotid)
						if self.rawchannel:
							print>>log, "[AutoBouquetsMaker] Nim found on slot id %d with sat %s" % (slotid, sat[1])
							current_slotid = slotid
							break
			else:
				if current_slotid == -1:	# mark the first valid slotid in case of no other one is free
					current_slotid = slotid
				self.rawchannel = resmanager.allocateRawChannel(slotid)
				if self.rawchannel:
 					print>>log, "[AutoBouquetsMaker] Nim found on slot id %d" % (slotid)
					current_slotid = slotid
					break


			if self.rawchannel:
				break

		if current_slotid == -1:
			print>>log, "[AutoBouquetsMaker] No valid NIM found"
			self.showError(_('No valid NIM found'))
			return

		if not self.rawchannel:
			print>>log, "[AutoBouquetsMaker] Nim found on slot id %d but it's busy. Stop current service" % current_slotid
			if self.session.nav.RecordTimer.isRecording():
				print>>log, "[AutoBouquetsMaker] Cannot free NIM because a record is in progress"
				self.showError(_('Cannot free NIM because a record is in progress'))
				return

			self.postScanService = self.session.nav.getCurrentlyPlayingServiceReference()
			self.session.nav.stopService()
			if self.session.pipshown:
				self.session.pipshown = False

			self.rawchannel = resmanager.allocateRawChannel(current_slotid)
			if not self.rawchannel:
				print>>log, "[AutoBouquetsMaker] Cannot get the NIM"
				self.showError(_('Cannot get the NIM'))
				return

		self.frontend = self.rawchannel.getFrontend()
		if not self.frontend:
			print>>log, "[AutoBouquetsMaker] Cannot get frontend"
			self.showError(_('Cannot get frontend'))
			return

		demuxer_id = self.rawchannel.reserveDemux()
		if demuxer_id < 0:
			print>>log, "[AutoBouquetsMaker] Cannot allocate the demuxer"
			self.showError(_('Cannot allocate the demuxer'))
			return

		if self.providers[self.currentAction]["streamtype"] == "dvbs":
			params = eDVBFrontendParametersSatellite()
			params.frequency = transponder["frequency"]
			params.symbol_rate = transponder["symbol_rate"]
			params.polarisation = transponder["polarization"]
			params.fec = transponder["fec_inner"]
			params.inversion = transponder["inversion"]
			params.orbital_position = transponder["orbital_position"]
			params.system = transponder["system"]
			params.modulation = transponder["modulation"]
			params.rolloff = transponder["roll_off"]
			params.pilot = transponder["pilot"]
			params_fe = eDVBFrontendParameters()
			params_fe.setDVBS(params, False)

		elif self.providers[self.currentAction]["streamtype"] == "dvbt":
			params = eDVBFrontendParametersTerrestrial()
			params.frequency = transponder["frequency"]
			params.bandwidth = transponder["bandwidth"]
			params.code_rate_hp = transponder["code_rate_hp"]
			params.code_rate_lp = transponder["code_rate_lp"]
			params.inversion = transponder["inversion"]
			params.system = transponder["system"]
			params.modulation = transponder["modulation"]
			params.transmission_mode = transponder["transmission_mode"]
			params.guard_interval = transponder["guard_interval"]
			params.hierarchy = transponder["hierarchy"]
			params_fe = eDVBFrontendParameters()
			params_fe.setDVBT(params)

		elif self.providers[self.currentAction]["streamtype"] == "dvbc":
			params = eDVBFrontendParametersCable()
			params.frequency = transponder["frequency"]
			params.symbol_rate = transponder["symbol_rate"]
			params.fec_inner = transponder["fec_inner"]
			params.inversion = transponder["inversion"]
			params.modulation = transponder["modulation"]
			params_fe = eDVBFrontendParameters()
			params_fe.setDVBC(params)

		self.rawchannel.requestTsidOnid()
		self.frontend.tune(params_fe)
		self.manager.setAdapter(0)	# FIX: use the correct device
		self.manager.setDemuxer(demuxer_id)
		self.manager.setFrontend(current_slotid)

		self.lockcounter = 0
		self.locktimer = eTimer()
		self.locktimer.callback.append(self.checkTunerLock)
		self.locktimer.start(100, 1)
Exemple #40
0
	def doTune(self):
		print>>log, "[ABM-main][doTune] searching for tuner for %s" % self.providers[self.currentAction]["name"]
		from Screens.Standby import inStandby
		if self.providers[self.currentAction]["streamtype"] == "dvbs":
			transponder = self.providers[self.currentAction]["transponder"]
		else:
			bouquet_key = None
			providers_tmp = self.abm_settings_str.split("|")
			for provider_tmp in providers_tmp:
				provider_config = ProviderConfig(provider_tmp)
				provider_key = provider_config.getProvider()
				if self.currentAction != provider_key:
					continue
				bouquet_key = provider_config.getArea()

			if not bouquet_key:
				print>>log, "[ABM-main][doTune] No area found"
				self.showError(_('No area found'))
				return

			transponder = self.providers[self.currentAction]["bouquets"][bouquet_key]

		nimList = []
		for nim in nimmanager.nim_slots:
			if self.providers[self.currentAction]["streamtype"] == "dvbs" and nim.isCompatible("DVB-S"):
				try:
					if nim.isFBCTuner() and not nim.isFBCRoot():
						continue # do not load FBC links, only root tuners
				except:
					pass
			try: # OpenPLi Hot Switch compatible image
				if (nim.config_mode not in ("loopthrough", "satposdepends", "nothing")) and \
					{"dvbs": "DVB-S", "dvbc": "DVB-C", "dvbt": "DVB-T"}.get(self.providers[self.currentAction]["streamtype"], "UNKNOWN") in [x[:5] for x in nim.getTunerTypesEnabled()]:
					nimList.append(nim.slot)
			except AttributeError:
				try:
					if (nim.config_mode not in ("loopthrough", "satposdepends", "nothing")) and \
						((self.providers[self.currentAction]["streamtype"] == "dvbs" and nim.isCompatible("DVB-S")) or \
						(self.providers[self.currentAction]["streamtype"] == "dvbc" and (nim.isCompatible("DVB-C") or (nim.isCompatible("DVB-S") and nim.canBeCompatible("DVB-C")))) or \
						(self.providers[self.currentAction]["streamtype"] == "dvbt" and (nim.isCompatible("DVB-T") or (nim.isCompatible("DVB-S") and nim.canBeCompatible("DVB-T"))))):
						nimList.append(nim.slot)
				except AttributeError: # OpenATV > 5.3
					if (self.providers[self.currentAction]["streamtype"] == "dvbs" and nim.canBeCompatible("DVB-S") and nim.config_mode_dvbs not in ("loopthrough", "satposdepends", "nothing")) or \
						(self.providers[self.currentAction]["streamtype"] == "dvbc" and nim.canBeCompatible("DVB-C") and nim.config_mode_dvbc != "nothing") or \
						(self.providers[self.currentAction]["streamtype"] == "dvbt" and nim.canBeCompatible("DVB-T") and nim.config_mode_dvbt != "nothing"):
						nimList.append(nim.slot)

		if len(nimList) == 0:
			print>>log, "[ABM-main][doTune] No NIMs found"
			self.showError(_('No NIMs found for ') + self.providers[self.currentAction]["name"])
			return

		resmanager = eDVBResourceManager.getInstance()
		if not resmanager:
			print>>log, "[ABM-main][doTune] Cannot retrieve Resource Manager instance"
			self.showError(_('Cannot retrieve Resource Manager instance'))
			return

		if self.providers[self.currentAction]["streamtype"] == "dvbs":
			print>>log, "[ABM-main][doTune] Search NIM for orbital position %d" % transponder["orbital_position"]
		else:
			print>>log, "[ABM-main][doTune] Search NIM"

		# stop pip if running
		if self.session.pipshown:
			self.session.pipshown = False
			del self.session.pip
			print>>log, "[ABM-main][doTune] Stopping PIP."

		# stop currently playing service if it is using a tuner in ("loopthrough", "satposdepends")
		currentlyPlayingNIM = None
		currentService = self.session and self.session.nav.getCurrentService()
		frontendInfo = currentService and currentService.frontendInfo()
		frontendData = frontendInfo and frontendInfo.getAll(True)
		if frontendData is not None:
			currentlyPlayingNIM = frontendData.get("tuner_number", None)
			if self.providers[self.currentAction]["streamtype"] == "dvbs" and currentlyPlayingNIM is not None and nimmanager.nim_slots[currentlyPlayingNIM].isCompatible("DVB-S"):
				try:
					nimConfigMode = nimmanager.nim_slots[currentlyPlayingNIM].config_mode
				except AttributeError: # OpenATV > 5.3
					nimConfigMode = nimmanager.nim_slots[currentlyPlayingNIM].config_mode_dvbs
				if nimConfigMode in ("loopthrough", "satposdepends"):
					self.postScanService = self.session.nav.getCurrentlyPlayingServiceReference()
					self.session.nav.stopService()
					currentlyPlayingNIM = None
					print>>log, "[ABM-main][doTune] The active service was using a %s tuner, so had to be stopped (slot id %s)." % (nimConfigMode, currentlyPlayingNIM)
		del frontendInfo
		del currentService

		current_slotid = -1
		if self.rawchannel:
			del(self.rawchannel)

		self.frontend = None
		self.rawchannel = None

		nimList.reverse() # start from the last
		for slotid in nimList:
			if self.providers[self.currentAction]["streamtype"] == "dvbs":
				sats = nimmanager.getSatListForNim(slotid)
				for sat in sats:
					if sat[0] == transponder["orbital_position"]:
						if current_slotid == -1:	# mark the first valid slotid in case of no other one is free
							current_slotid = slotid

						self.rawchannel = resmanager.allocateRawChannel(slotid)
						if self.rawchannel:
							print>>log, "[ABM-main][doTune] Nim found on slot id %d with sat %s" % (slotid, sat[1])
							current_slotid = slotid
						break
			else:
				if current_slotid == -1:	# mark the first valid slotid in case of no other one is free
					current_slotid = slotid
				self.rawchannel = resmanager.allocateRawChannel(slotid)
				if self.rawchannel:
 					print>>log, "[ABM-main][doTune] Nim found on slot id %d" % (slotid)
					current_slotid = slotid
					break

			if self.rawchannel:
				break

		if current_slotid == -1:
			print>>log, "[ABM-main][doTune] No valid NIM found"
			self.showError(_('No valid NIM found for ') + self.providers[self.currentAction]["name"])
			return

		if not self.rawchannel:
			# if we are here the only possible option is to close the active service
			if currentlyPlayingNIM in nimList:
				slotid = currentlyPlayingNIM
				if self.providers[self.currentAction]["streamtype"] == "dvbs":
					sats = nimmanager.getSatListForNim(slotid)
					for sat in sats:
						if sat[0] == transponder["orbital_position"]:
							print>>log, "[ABM-main][doTune] Nim found on slot id %d but it's busy. Stopping active service" % slotid
							self.postScanService = self.session.nav.getCurrentlyPlayingServiceReference()
							self.session.nav.stopService()
							self.rawchannel = resmanager.allocateRawChannel(slotid)
							if self.rawchannel:
								print>>log, "[ABM-main][doTune] The active service was stopped, and the NIM is now free to use."
								current_slotid = slotid
							break
				else:
					print>>log, "[ABM-main][doTune] Nim found on slot id %d but it's busy. Stopping active service" % slotid
					self.postScanService = self.session.nav.getCurrentlyPlayingServiceReference()
					self.session.nav.stopService()
					self.rawchannel = resmanager.allocateRawChannel(slotid)
					if self.rawchannel:
						print>>log, "[ABM-main][doTune] The active service was stopped, and the NIM is now free to use."
						current_slotid = slotid

			if not self.rawchannel:
				if self.session.nav.RecordTimer.isRecording():
					print>>log, "[ABM-main][doTune] Cannot free NIM because a recording is in progress"
					self.showError(_('Cannot free NIM because a recording is in progress'))
					return
				else:
					print>>log, "[ABM-main][doTune] Cannot get the NIM"
					self.showError(_('Cannot get the NIM'))
					return

		# set extended timeout for rotors
		self.motorised = False
		if self.providers[self.currentAction]["streamtype"] == "dvbs" and self.isRotorSat(current_slotid, transponder["orbital_position"]):
			self.motorised = True
			self.LOCK_TIMEOUT = self.LOCK_TIMEOUT_ROTOR
			print>>log, "[ABM-main][doTune] Motorised dish. Will wait up to %i seconds for tuner lock." % (self.LOCK_TIMEOUT/10)
		else:
			self.LOCK_TIMEOUT = self.LOCK_TIMEOUT_FIXED
			print>>log, "[ABM-main][doTune] Fixed dish. Will wait up to %i seconds for tuner lock." % (self.LOCK_TIMEOUT/10)

		self.frontend = self.rawchannel.getFrontend()
		if not self.frontend:
			print>>log, "[ABM-main][doTune] Cannot get frontend"
			self.showError(_('Cannot get frontend'))
			return

		demuxer_id = self.rawchannel.reserveDemux()
		if demuxer_id < 0:
			print>>log, "[ABM-main][doTune] Cannot allocate the demuxer."
			self.showError(_('Cannot allocate the demuxer.'))
			return

		if self.providers[self.currentAction]["streamtype"] == "dvbs":
			params = eDVBFrontendParametersSatellite()
			params.frequency = transponder["frequency"]
			params.symbol_rate = transponder["symbol_rate"]
			params.polarisation = transponder["polarization"]
			params.fec = transponder["fec_inner"]
			params.inversion = transponder["inversion"]
			params.orbital_position = transponder["orbital_position"]
			params.system = transponder["system"]
			params.modulation = transponder["modulation"]
			params.rolloff = transponder["roll_off"]
			params.pilot = transponder["pilot"]
			try: # if distro is MIS capable
				params.pls_mode = eDVBFrontendParametersSatellite.PLS_Root
				params.is_id = -1
				params.pls_code = 1
			except:
				pass
			params_fe = eDVBFrontendParameters()
			params_fe.setDVBS(params, False)

		elif self.providers[self.currentAction]["streamtype"] == "dvbt":
			params = eDVBFrontendParametersTerrestrial()
			params.frequency = transponder["frequency"]
			params.bandwidth = transponder["bandwidth"]
			params.code_rate_hp = transponder["code_rate_hp"]
			params.code_rate_lp = transponder["code_rate_lp"]
			params.inversion = transponder["inversion"]
			params.system = transponder["system"]
			params.modulation = transponder["modulation"]
			params.transmission_mode = transponder["transmission_mode"]
			params.guard_interval = transponder["guard_interval"]
			params.hierarchy = transponder["hierarchy"]
			params_fe = eDVBFrontendParameters()
			params_fe.setDVBT(params)

		elif self.providers[self.currentAction]["streamtype"] == "dvbc":
			params = eDVBFrontendParametersCable()
			params.frequency = transponder["frequency"]
			params.symbol_rate = transponder["symbol_rate"]
			params.fec_inner = transponder["fec_inner"]
			params.inversion = transponder["inversion"]
			params.modulation = transponder["modulation"]
			params_fe = eDVBFrontendParameters()
			params_fe.setDVBC(params)

		try:
			self.rawchannel.requestTsidOnid()
		except (TypeError):
			# for compatibility with some third party images
			self.rawchannel.requestTsidOnid(self.gotTsidOnid)

		self.frontend.tune(params_fe)
		self.manager.setAdapter(0)	# FIX: use the correct device
		self.manager.setDemuxer(demuxer_id)
		self.manager.setFrontend(current_slotid)

		self.current_slotid = current_slotid
		self.lockcounter = 0
		self.locktimer = eTimer()
		self.locktimer.callback.append(self.checkTunerLock)
		self.locktimer.start(100, 1)
Exemple #41
0
    def doTune(self):
        from Screens.Standby import inStandby
        transponder = self.providers[self.currentAction]["transponder"]
        nimList = nimmanager.getNimListOfType("DVB-S")
        if len(nimList) == 0:
            print >> log, "[AutoBouquetsMaker] No DVB-S NIMs founds"
            self.showError(_('No DVB-S NIMs founds'))
            return

        resmanager = eDVBResourceManager.getInstance()
        if not resmanager:
            print >> log, "[AutoBouquetsMaker] Cannot retrieve Resource Manager instance"
            self.showError(_('Cannot retrieve Resource Manager instance'))
            return

        print >> log, "[AutoBouquetsMaker] Search NIM for orbital position %d" % transponder[
            "orbital_position"]
        current_slotid = -1
        if self.rawchannel:
            del (self.rawchannel)

        self.frontend = None
        self.rawchannel = None

        nimList.reverse()  # start from the last
        for slotid in nimList:
            sats = nimmanager.getSatListForNim(slotid)
            for sat in sats:
                if sat[0] == transponder["orbital_position"]:
                    if current_slotid == -1:  # mark the first valid slotid in case of no other one is free
                        current_slotid = slotid

                    self.rawchannel = resmanager.allocateRawChannel(slotid)
                    if self.rawchannel:
                        print >> log, "[AutoBouquetsMaker] Nim found on slot id %d with sat %s" % (
                            slotid, sat[1])
                        current_slotid = slotid
                        break

            if self.rawchannel:
                break

        if current_slotid == -1:
            print >> log, "[AutoBouquetsMaker] No valid NIM found"
            self.showError(_('No valid NIM found'))
            return

        if not self.rawchannel:
            print >> log, "[AutoBouquetsMaker] Nim found on slot id %d but it's busy. Stop current service" % current_slotid
            if self.session.nav.RecordTimer.isRecording():
                print >> log, "[AutoBouquetsMaker] Cannot free NIM because a record is in progress"
                self.showError(
                    _('Cannot free NIM because a record is in progress'))
                return

            self.postScanService = self.session.nav.getCurrentlyPlayingServiceReference(
            )
            self.session.nav.stopService()
            if self.session.pipshown:
                self.session.pipshown = False

            self.rawchannel = resmanager.allocateRawChannel(current_slotid)
            if not self.rawchannel:
                print >> log, "[AutoBouquetsMaker] Cannot get the NIM"
                self.showError(_('Cannot get the NIM'))
                return

        self.frontend = self.rawchannel.getFrontend()
        if not self.frontend:
            print >> log, "[AutoBouquetsMaker] Cannot get frontend"
            self.showError(_('Cannot get frontend'))
            return

        demuxer_id = self.rawchannel.reserveDemux()
        if demuxer_id < 0:
            print >> log, "[AutoBouquetsMaker] Cannot allocate the demuxer"
            self.showError(_('Cannot allocate the demuxer'))
            return

        params = eDVBFrontendParametersSatellite()
        params.frequency = transponder["frequency"]
        params.symbol_rate = transponder["symbol_rate"]
        params.polarisation = transponder["polarization"]
        params.fec = transponder["fec_inner"]
        params.inversion = transponder["inversion"]
        params.orbital_position = transponder["orbital_position"]
        params.system = transponder["system"]
        params.modulation = transponder["modulation"]
        params.rolloff = transponder["roll_off"]
        params.pilot = transponder["pilot"]
        params_fe = eDVBFrontendParameters()
        params_fe.setDVBS(params, False)
        self.rawchannel.requestTsidOnid()
        self.frontend.tune(params_fe)
        self.manager.setAdapter(0)  # FIX: use the correct device
        self.manager.setDemuxer(demuxer_id)
        self.manager.setFrontend(current_slotid)

        self.lockcounter = 0
        self.locktimer = eTimer()
        self.locktimer.callback.append(self.checkTunerLock)
        self.locktimer.start(100, 1)
Exemple #42
0
    def frontendStateChanged(self):
        if self.frontend is None:
            self.timer.start(5000, True)
            return
        x = {}
        self.frontend.getFrontendStatus(x)
        assert x, "getFrontendStatus failed!"
        if x["tuner_state"] in ("LOCKED", "FAILED", "LOSTLOCK"):
            state = self.satellite_search_session

            d = {}
            self.frontend.getTransponderData(d, False)
            d["tuner_type"] = 'DVB-S'
            r = ConvertToHumanReadable(d)

            if x["tuner_state"] == "LOCKED":
                freq = d["frequency"]
                parm = eDVBFrontendParametersSatellite()
                parm.frequency = int(round(float(freq * 2) / 1000)) * 1000
                parm.frequency /= 2
                fstr = str(parm.frequency)
                if self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Horizontal:
                    fstr += "H KHz SR"
                elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Vertical:
                    fstr += "V KHz SR"
                elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularLeft:
                    fstr += "L KHz SR"
                elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularRight:
                    fstr += "R KHz SR"
                sr = d["symbol_rate"]
                if sr < 0:
                    print "WARNING blind SR is < 0... skip"
                    if not self.auto_scan:
                        self.parm.frequency += self.parm.symbol_rate
                else:
                    sr_rounded = round(float(sr * 2L) / 1000) * 1000
                    sr_rounded /= 2
                    parm.symbol_rate = int(sr_rounded)
                    fstr += str(parm.symbol_rate / 1000)
                    parm.fec = d["fec_inner"]
                    fstr += " "
                    fstr += r["fec_inner"]
                    parm.inversion = eDVBFrontendParametersSatellite.Inversion_Unknown
                    parm.polarisation = d["polarization"]
                    parm.orbital_position = d["orbital_position"]
                    parm.system = d["system"]
                    fstr += " "
                    fstr += r["system"]
                    parm.modulation = d["modulation"]
                    fstr += " "
                    fstr += r["modulation"]

                    if parm.system == eDVBFrontendParametersSatellite.System_DVB_S2:
                        parm.rolloff = d["rolloff"]
                        parm.pilot = d["pilot"]
                    self.__tlist.append(parm)
                    if self.auto_scan:
                        print "LOCKED at", freq
                    else:
                        print "LOCKED at", freq, "SEARCHED at", self.parm.frequency, "half bw", (
                            135L * ((sr + 1000) / 1000) /
                            200), "half search range", (self.parm.symbol_rate /
                                                        2)
                        self.parm.frequency = freq
                        self.parm.frequency += (135L * ((sr + 999) / 1000) /
                                                200)
                        self.parm.frequency += self.parm.symbol_rate / 2

                    bm = state.getConstellationBitmap(5)
                    self.tp_found.append((fstr, bm))
                    state.updateConstellation(bm)

                    if len(self.tp_found):
                        state["list"].updateList(self.tp_found)
                    else:
                        state["list"].setList(self.tp_found)
                        state["list"].setIndex(0)
            else:
                if self.auto_scan:  #when driver based auto scan is used we got a tuneFailed event when the scan has scanned the last frequency...
                    self.parm = self.setNextRange()
                else:
                    self.parm.frequency += self.parm.symbol_rate

            if self.auto_scan:
                freq = d["frequency"]
                freq = int(round(float(freq * 2) / 1000)) * 1000
                freq /= 2
                mhz_complete, mhz_done = self.stats(freq)
                print "CURRENT freq", freq, "%d/%d" % (mhz_done, mhz_complete)
                check_finished = self.parm is None
            else:
                print "NEXT freq", self.parm.frequency
                mhz_complete, mhz_done = self.stats()
                check_finished = self.parm.frequency > self.range_list[
                    self.current_range][1]
                if check_finished:
                    self.parm = self.setNextRange()

            seconds_done = int(time() - self.start_time)

            if check_finished:
                if self.parm is None:
                    tmpstr = _("%dMHz scanned") % mhz_complete
                    tmpstr += ', '
                    tmpstr += _("%d transponders found at %d:%02d min") % (len(
                        self.tp_found), seconds_done / 60, seconds_done % 60)
                    state["progress"].setText(tmpstr)
                    state.setFinished()
                    self.frontend = None
                    self.channel = None
                    return

            if self.auto_scan:
                tmpstr = str((freq + 500) / 1000)
            else:
                tmpstr = str((self.parm.frequency + 500) / 1000)

            if self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Horizontal:
                tmpstr += "H"
            elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Vertical:
                tmpstr += "V"
            elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularLeft:
                tmpstr += "L"
            elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularRight:
                tmpstr += "R"

            tmpstr += ', '
            tmpstr += "%d/%dMhz" % (mhz_done, mhz_complete)

            tmpstr += ", "
            tmpstr += _("%d transponder(s) found") % len(self.tp_found)

            tmpstr += ', '

            seconds_complete = (seconds_done * mhz_complete) / max(mhz_done, 1)
            tmpstr += _("%d:%02d/%d:%02dmin") % (
                seconds_done / 60, seconds_done % 60, seconds_complete / 60,
                seconds_complete % 60)

            state["progress"].setText(tmpstr)

            self.tuneNext()
        else:
            print "unhandled tuner state", x["tuner_state"]
        self.timer.start(1500, True)
Exemple #43
0
    def frontendStateChanged(self):
        state = []
        state = self.frontend.getState()
        #	    print "State=", state[1]
        if state[1] > 1:
            x = {}
            self.frontend.getFrontendStatus(x)
            assert x, "getFrontendStatus failed!"
            if x["tuner_state"] in ("LOCKED", "FAILED", "LOSTLOCK"):
                state = self.satellite_search_session

                d = {}
                self.frontend.getTransponderData(d, False)
                d["tuner_type"] = 'DVB-S'
                r = ConvertToHumanReadable(d)

                if x["tuner_state"] == "LOCKED":
                    freq = d["frequency"]
                    parm = eDVBFrontendParametersSatellite()
                    parm.frequency = int(round(float(freq * 2) / 1000)) * 1000
                    parm.frequency /= 2
                    fstr = str(parm.frequency)
                    if self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Horizontal:
                        fstr += "H KHz SR"
                    elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Vertical:
                        fstr += "V KHz SR"
                    elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularLeft:
                        fstr += "L KHz SR"
                    elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularRight:
                        fstr += "R KHz SR"
                    sr = d["symbol_rate"]
                    #				print "SR before round", sr
                    if sr < 0:
                        print "WARNING blind SR is < 0... skip"
                        self.parm.frequency += self.parm.symbol_rate
                    else:
                        sr_rounded = round(float(sr * 2L) / 1000) * 1000
                        sr_rounded /= 2
                        #					print "SR after round", sr_rounded
                        parm.symbol_rate = int(sr_rounded)
                        fstr += str(parm.symbol_rate / 1000)
                        parm.fec = d["fec_inner"]
                        fstr += " "
                        fstr += r["fec_inner"]
                        parm.inversion = d["inversion"]
                        parm.polarisation = d["polarization"]
                        parm.orbital_position = d["orbital_position"]
                        parm.system = d["system"]
                        fstr += " "
                        fstr += r["system"]
                        parm.modulation = d["modulation"]
                        fstr += " "
                        fstr += r["modulation"]

                        if parm.system == eDVBFrontendParametersSatellite.System_DVB_S2:
                            parm.rolloff = d["rolloff"]
                            parm.pilot = d["pilot"]
                            parm.is_id = d["is_id"]
                            parm.pls_mode = d["pls_mode"]
                        self.__tlist.append(parm)

                        print "LOCKED at", freq, "SEARCHED at", self.parm.frequency, "half bw", (
                            135L * ((sr + 1000) / 1000) /
                            200), "half search range", (self.parm.symbol_rate /
                                                        2)
                        self.parm.frequency = freq
                        self.parm.frequency += (135L * ((sr + 999) / 1000) /
                                                200)
                        self.parm.frequency += self.parm.symbol_rate / 2

                        bm = state.getConstellationBitmap(5)
                        self.tp_found.append((fstr, bm))
                        state.updateConstellation(bm)

                        if len(self.tp_found):
                            state["list"].updateList(self.tp_found)
                        else:
                            state["list"].setList(self.tp_found)
                            state["list"].setIndex(0)
                else:
                    self.parm.frequency += self.parm.symbol_rate

                print "NEXT freq", self.parm.frequency

                mhz_complete, mhz_done = self.stats()
                seconds_done = int(time() - self.start_time)

                if self.parm.frequency > self.range_list[
                        self.current_range][1]:
                    self.parm = self.setNextRange()
                    if self.parm is not None:
                        tparm = eDVBFrontendParameters()
                        tparm.setDVBS(self.parm, False)
                        self.frontend.tune(tparm)
                    else:
                        tmpstr = _("%dMHz scanned") % mhz_complete
                        tmpstr += ', '
                        tmpstr += _("%d transponders found at %d:%02dmin") % (
                            len(self.tp_found), seconds_done / 60,
                            seconds_done % 60)
                        state["progress"].setText(tmpstr)
                        state.setFinished()
                        #					self.frontend.getStateChangeSignal().remove(self.frontendStateChanged)
                        self.frontend = None
                        self.channel = None
                        return

                tmpstr = str((self.parm.frequency + 500) / 1000)
                if self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Horizontal:
                    tmpstr += "H"
                elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Vertical:
                    tmpstr += "V"
                elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularLeft:
                    tmpstr += "L"
                elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularRight:
                    tmpstr += "R"

                tmpstr += ', '
                tmpstr += "%d/%dMHz" % (mhz_done, mhz_complete)

                tmpstr += ", "
                tmpstr += _("%d transponder(s) found") % len(self.tp_found)

                tmpstr += ', '

                seconds_complete = (seconds_done * mhz_complete) / mhz_done
                tmpstr += _("%d:%02d/%d:%02dmin") % (
                    seconds_done / 60, seconds_done % 60,
                    seconds_complete / 60, seconds_complete % 60)

                state["progress"].setText(tmpstr)

                self.tuneNext()
            else:
                print "unhandled tuner state", x["tuner_state"]
        self.timer.start(500, True)
Exemple #44
0
	def frontendStateChanged(self):
		if self.frontend is None:
			self.timer.start(5000, True)
			return
		x = {}
		self.frontend.getFrontendStatus(x)
		assert x, "getFrontendStatus failed!"
		if x["tuner_state"] in ("LOCKED", "FAILED", "LOSTLOCK"):
			state = self.satellite_search_session

			d = {}
			self.frontend.getTransponderData(d, False)
			d["tuner_type"] = 'DVB-S' # what is this doing? Nothing good by the look of it.
			r = ConvertToHumanReadable(d)

			if x["tuner_state"] == "LOCKED":
				freq = int(round(d["frequency"], -3)) # round to nearest 1000
				parm = eDVBFrontendParametersSatellite()
				parm.frequency = freq
				if d["symbol_rate"] < 0:
					print("[dmmBlindscan][frontendStateChanged] WARNING blind SR is < 0... skip")
					if not self.auto_scan:
						self.parm.frequency += self.parm.symbol_rate
				else:
					parm.symbol_rate = int(round(d["symbol_rate"], -3))
					parm.fec = d["fec_inner"]
					parm.inversion = eDVBFrontendParametersSatellite.Inversion_Unknown
					parm.polarisation = d["polarization"]
					parm.orbital_position = d["orbital_position"]
					parm.system = d["system"]
					parm.modulation = d["modulation"]
					if parm.system == eDVBFrontendParametersSatellite.System_DVB_S2:
						parm.rolloff = d["rolloff"]
						parm.pilot = d["pilot"]
					if hasattr(parm, "is_id"):
						parm.is_id = d["is_id"]
					if hasattr(parm, "pls_mode"):
						parm.pls_mode = d["pls_mode"]
					if hasattr(parm, "pls_code"):
						parm.pls_code = d["pls_code"]
					if hasattr(parm, "t2mi_plp_id"):
						parm.t2mi_plp_id = d["t2mi_plp_id"]
					if hasattr(parm, "t2mi_pid"):
						parm.t2mi_pid = d["t2mi_pid"]

					print("[dmmBlindscan][frontendStateChanged] About to run filters")
					parm_list = self.runFilters([parm], self.__tlist) # parm_list will contain a maximum of one transponder as the input is only one transponder
					if parm_list:
						parm = parm_list[0]
						self.__tlist.append(parm)

					fstr = "%s %s %s %s %s %s" % (
						str(parm.frequency // 1000),
						{eDVBFrontendParametersSatellite.Polarisation_Horizontal: "H", eDVBFrontendParametersSatellite.Polarisation_Vertical: "V", eDVBFrontendParametersSatellite.Polarisation_CircularLeft: "L", eDVBFrontendParametersSatellite.Polarisation_CircularRight: "R"}.get(parm.polarisation),
						str(parm.symbol_rate // 1000),
						r["fec_inner"],
						r["system"],
						r["modulation"])

					if not parm_list:
						print("[dmmBlindscan][frontendStateChanged] Transponder removed by filters, %s" % fstr)

					sr = parm.symbol_rate
					if self.auto_scan:
						print("[dmmBlindscan][frontendStateChanged] LOCKED at", freq, {eDVBFrontendParametersSatellite.Polarisation_Horizontal: "H", eDVBFrontendParametersSatellite.Polarisation_Vertical: "V", eDVBFrontendParametersSatellite.Polarisation_CircularLeft: "L", eDVBFrontendParametersSatellite.Polarisation_CircularRight: "R"}.get(parm.polarisation))
					else:
						print("[dmmBlindscan][frontendStateChanged] LOCKED at", freq, "SEARCHED at", self.parm.frequency, "half bw", (135 * ((sr + 1000) // 1000) // 200), "half search range", (self.parm.symbol_rate / 2))
						self.parm.frequency = freq
						self.parm.frequency += (135 * ((sr + 999) // 1000) // 200)
						self.parm.frequency += self.parm.symbol_rate / 2

					if parm_list:
						bm = state.getConstellationBitmap(5)
						self.tp_found.append((fstr, bm))
						state.updateConstellation(bm)

					if len(self.tp_found):
						state["list"].updateList(self.tp_found)
					else:
						state["list"].setList(self.tp_found)
						state["list"].setIndex(0)
			else:
				if self.auto_scan: #when driver based auto scan is used we got a tuneFailed event when the scan has scanned the last frequency...
					self.parm = self.setNextRange()
				else:
					self.parm.frequency += self.parm.symbol_rate

			if self.auto_scan:
#				freq = d["frequency"]
#				freq = int(round(float(freq*2) // 1000)) * 1000
#				freq /= 2
				freq = int(round(d["frequency"], -3)) # round to nearest 1000
				mhz_complete, mhz_done = self.stats(freq)
				print("[dmmBlindscan][frontendStateChanged] CURRENT freq", freq, "%d/%d" % (mhz_done, mhz_complete))
				check_finished = self.parm is None
			else:
				print("[dmmBlindscan][frontendStateChanged] NEXT freq", self.parm.frequency)
				mhz_complete, mhz_done = self.stats()
				check_finished = self.parm.frequency > self.range_list[self.current_range][1]
				if check_finished:
					self.parm = self.setNextRange()

			seconds_done = int(time() - self.start_time)

			if check_finished:
				if self.parm is None:
					tmpstr = _("%dMHz scanned") % mhz_complete
					tmpstr += ', '
					tmpstr += _("%d transponders found at %d:%02d min") % (len(self.tp_found), seconds_done / 60, seconds_done % 60)
					state["progress"].setText(tmpstr)
					state.setFinished()
					self.frontend = None
					self.raw_channel = None
					return

			if self.auto_scan:
				tmpstr = str((freq + 500) // 1000)
			else:
				tmpstr = str((self.parm.frequency + 500) // 1000)

			if self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Horizontal:
				tmpstr += "H"
			elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_Vertical:
				tmpstr += "V"
			elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularLeft:
				tmpstr += "L"
			elif self.parm.polarisation == eDVBFrontendParametersSatellite.Polarisation_CircularRight:
				tmpstr += "R"

			tmpstr += ', '
			tmpstr += "%d/%dMhz" % (mhz_done, mhz_complete)

			tmpstr += ", "
			tmpstr += _("%d transponder(s) found") % len(self.tp_found)

			tmpstr += ', '

			seconds_complete = (seconds_done * mhz_complete) / max(mhz_done, 1)
			tmpstr += _("%d:%02d/%d:%02dmin") % (seconds_done / 60, seconds_done % 60, seconds_complete / 60, seconds_complete % 60)

			state["progress"].setText(tmpstr)

			self.tuneNext()
		else:
			print("[dmmBlindscan]unhandled tuner state", x["tuner_state"])
		self.timer.start(1500, True)
Exemple #45
0
    def StatusAppContainerDataAvail(self, str):

        enigma_system = {
            "DVB-S": eDVBFrontendParametersSatellite.System_DVB_S,
            "DVB-S2": eDVBFrontendParametersSatellite.System_DVB_S2
        }

        enigma_modulation = {
            "QPSK": eDVBFrontendParametersSatellite.Modulation_QPSK,
            "8PSK": eDVBFrontendParametersSatellite.Modulation_8PSK
        }

        enigma_inversion = {
            "INVERSION_OFF": eDVBFrontendParametersSatellite.Inversion_Off,
            "INVERSION_ON": eDVBFrontendParametersSatellite.Inversion_On,
            "INVERSION_AUTO": eDVBFrontendParametersSatellite.Inversion_Unknown
        }

        enigma_fec = {
            "FEC_AUTO": eDVBFrontendParametersSatellite.FEC_Auto,
            "FEC_1_2": eDVBFrontendParametersSatellite.FEC_1_2,
            "FEC_2_3": eDVBFrontendParametersSatellite.FEC_2_3,
            "FEC_3_4": eDVBFrontendParametersSatellite.FEC_3_4,
            "FEC_5_6": eDVBFrontendParametersSatellite.FEC_5_6,
            "FEC_7_8": eDVBFrontendParametersSatellite.FEC_7_8,
            "FEC_8_9": eDVBFrontendParametersSatellite.FEC_8_9,
            "FEC_3_5": eDVBFrontendParametersSatellite.FEC_3_5,
            "FEC_9_10": eDVBFrontendParametersSatellite.FEC_9_10,
            "FEC_NONE": eDVBFrontendParametersSatellite.FEC_None
        }

        enigma_rollof = {
            "ROLLOFF_20": eDVBFrontendParametersSatellite.RollOff_alpha_0_20,
            "ROLLOFF_25": eDVBFrontendParametersSatellite.RollOff_alpha_0_25,
            "ROLLOFF_35": eDVBFrontendParametersSatellite.RollOff_alpha_0_35
        }

        enigma_pilot = {
            "PILOT_ON": eDVBFrontendParametersSatellite.Pilot_On,
            "PILOT_OFF": eDVBFrontendParametersSatellite.Pilot_Off
        }

        parent = self.parent

        for line in str.splitlines():
            #print "-->", line, "<--"

            if line.startswith("OK"):
                data = line.split()
                print "cnt:", len(data), ", data:", data
                if len(data) >= 10 and data[0] == "OK":
                    try:
                        transponder = eDVBFrontendParametersSatellite()
                        transponder.orbital_position = parent.position
                        transponder.polarisation = parent.PolarisationToEnigma(
                            parent.polarisation)
                        transponder.frequency = int(data[2])
                        transponder.symbol_rate = int(data[3])
                        transponder.system = enigma_system[data[4]]
                        transponder.inversion = enigma_inversion[data[5]]
                        transponder.pilot = enigma_pilot[data[6]]
                        transponder.fec = enigma_fec[data[7]]
                        transponder.modulation = enigma_modulation[data[8]]
                        transponder.rolloff = enigma_rollof[data[9]]
                        parent.enigma_transponders.append(transponder)

                        raw_transponder = {}
                        raw_transponder["pos"] = parent.PositionToString(
                            parent.position)
                        raw_transponder["freq"] = int(data[2])
                        raw_transponder["pol"] = parent.PolarisationToString(
                            parent.polarisation)
                        raw_transponder["system"] = data[4]
                        raw_transponder["mod"] = data[8]
                        raw_transponder["sr"] = int(data[3])
                        raw_transponder["fec"] = data[7]
                        raw_transponder["inv"] = data[5]
                        raw_transponder["pilot"] = data[6]
                        raw_transponder["rolloff"] = data[9]
                        parent.text_transponders.append(raw_transponder)

                        xml_transponder = {}
                        xml_transponder["freq"] = round(
                            int(data[2]) / 1000) * 1000
                        xml_transponder["sr"] = round(
                            int(data[3]) / 1000) * 1000
                        xml_transponder["pol"] = parent.PolarisationToEnigma(
                            parent.polarisation)
                        xml_transponder["fec"] = enigma_fec[data[7]] + 1
                        xml_transponder["system"] = enigma_system[data[4]]
                        xml_transponder["mod"] = enigma_modulation[data[8]]
                        parent.xml_transponders.append(xml_transponder)

                        message = "found: %d %s %s %s %d %s\n" % (int(data[2]) / 1000, \
                          parent.PolarisationToShortString(parent.polarisation), data[4], \
                          data[8], int(data[3]) / 1000, data[7])

                    except:
                        message = "invalid data: " + line + "\n"
                        pass
                else:
                    message = "invalid data: " + line + "\n"
            else:
                message = line + "\n"

            self.log = message + self.log
            self["info"].setText(self.log)

            parent.logfile.write(
                time.strftime("%Y/%m/%d %H:%M:%S: ") + message)

            parent.progress = parent.progress + 2
            self["scan_progress"].setValue(parent.progress)
Exemple #46
0
    def doTune(self):
        print("[ABM-main][doTune] searching for tuner for %s" %
              self.providers[self.currentAction]["name"],
              file=log)
        from Screens.Standby import inStandby
        if self.providers[self.currentAction]["streamtype"] == "dvbs":
            transponder = self.providers[self.currentAction]["transponder"]
        else:
            bouquet_key = None
            providers_tmp = self.abm_settings_str.split("|")
            for provider_tmp in providers_tmp:
                provider_config = ProviderConfig(provider_tmp)
                provider_key = provider_config.getProvider()
                if self.currentAction != provider_key:
                    continue
                bouquet_key = provider_config.getArea()

            if not bouquet_key:
                print("[ABM-main][doTune] No area found", file=log)
                self.showError(_('No area found'))
                return

            transponder = self.providers[
                self.currentAction]["bouquets"][bouquet_key]

        self.transponder = transponder

        nimList = []
        tunerSelectionAlgorithm = "UNKNOWN"  # for debug
        for nim in nimmanager.nim_slots:
            if self.providers[self.currentAction][
                    "streamtype"] == "dvbs" and nim.isCompatible("DVB-S"):
                try:
                    if nim.isFBCLink():
                        continue  # do not load FBC links, only root tuners
                except:
                    pass
            try:  # OpenPLi Hot Switch compatible image
                if (nim.config_mode not in ("loopthrough", "satposdepends", "nothing")) and \
                 {"dvbs": "DVB-S", "dvbc": "DVB-C", "dvbt": "DVB-T"}.get(self.providers[self.currentAction]["streamtype"], "UNKNOWN") in [x[:5] for x in nim.getTunerTypesEnabled()]:
                    if self.validNIM(nim.slot):
                        nimList.append(nim.slot)
                    tunerSelectionAlgorithm = "OpenPLi Hot Switch compatible"
            except AttributeError:
                try:
                    if (nim.config_mode not in ("loopthrough", "satposdepends", "nothing")) and \
                     ((self.providers[self.currentAction]["streamtype"] == "dvbs" and nim.isCompatible("DVB-S")) or
                     (self.providers[self.currentAction]["streamtype"] == "dvbc" and (nim.isCompatible("DVB-C") or (nim.isCompatible("DVB-S") and nim.canBeCompatible("DVB-C")))) or
                     (self.providers[self.currentAction]["streamtype"] == "dvbt" and (nim.isCompatible("DVB-T") or (nim.isCompatible("DVB-S") and nim.canBeCompatible("DVB-T"))))):
                        if self.validNIM(nim.slot):
                            nimList.append(nim.slot)
                        tunerSelectionAlgorithm = "Conventional"
                except AttributeError:  # OpenATV > 5.3
                    if (self.providers[self.currentAction]["streamtype"] == "dvbs" and nim.canBeCompatible("DVB-S") and nim.config_mode_dvbs not in ("loopthrough", "satposdepends", "nothing")) or \
                     (self.providers[self.currentAction]["streamtype"] == "dvbc" and nim.canBeCompatible("DVB-C") and nim.config_mode_dvbc != "nothing") or \
                     (self.providers[self.currentAction]["streamtype"] == "dvbt" and nim.canBeCompatible("DVB-T") and nim.config_mode_dvbt != "nothing"):
                        if self.validNIM(nim.slot):
                            nimList.append(nim.slot)
                        tunerSelectionAlgorithm = "OpenATV > 5.3"

        print("[ABM-main][doTune] tuner selection algorithm '%s'" %
              tunerSelectionAlgorithm,
              file=log)

        if len(nimList) == 0:
            print("[ABM-main][doTune] No NIMs found", file=log)
            self.showError(
                _('No NIMs found for ') +
                self.providers[self.currentAction]["name"])
            return

        resmanager = eDVBResourceManager.getInstance()
        if not resmanager:
            print(
                "[ABM-main][doTune] Cannot retrieve Resource Manager instance",
                file=log)
            self.showError(_('Cannot retrieve Resource Manager instance'))
            return

        if self.providers[self.currentAction][
                "streamtype"] == "dvbs":  # If we have a choice of dishes sort the nimList so "fixed" dishes have a higher priority than "motorised".
            nimList = [
                slot for slot in nimList
                if not self.isRotorSat(slot, transponder["orbital_position"])
            ] + [
                slot for slot in nimList
                if self.isRotorSat(slot, transponder["orbital_position"])
            ]

        # stop pip if running
        if self.session.pipshown:
            self.session.pipshown = False
            del self.session.pip
            print("[ABM-main][doTune] Stopping PIP.", file=log)

        # find currently playing nim
        currentlyPlayingNIM = None
        currentService = self.session and self.session.nav.getCurrentService()
        frontendInfo = currentService and currentService.frontendInfo()
        frontendData = frontendInfo and frontendInfo.getAll(True)
        if frontendData is not None:
            currentlyPlayingNIM = frontendData.get("tuner_number", None)
            # stop currently playing service if it is using a tuner in ("loopthrough", "satposdepends"), as running in this configuration will prevent getting rawchannel on the root tuner.
            if self.providers[self.currentAction][
                    "streamtype"] == "dvbs" and currentlyPlayingNIM is not None and nimmanager.nim_slots[
                        currentlyPlayingNIM].isCompatible("DVB-S"):
                try:
                    nimConfigMode = nimmanager.nim_slots[
                        currentlyPlayingNIM].config_mode
                except AttributeError:  # OpenATV > 5.3
                    nimConfigMode = nimmanager.nim_slots[
                        currentlyPlayingNIM].config_mode_dvbs
                if nimConfigMode in ("loopthrough", "satposdepends"):
                    self.postScanService = self.session.nav.getCurrentlyPlayingServiceReference(
                    )
                    self.session.nav.stopService()
                    currentlyPlayingNIM = None
                    print(
                        "[ABM-main][doTune] The active service was using a %s tuner, so had to be stopped (slot id %s)."
                        % (nimConfigMode, currentlyPlayingNIM),
                        file=log)
        del frontendInfo
        del currentService

        self.releaseFrontend()

        for current_slotid in nimList:
            self.rawchannel = resmanager.allocateRawChannel(current_slotid)
            if self.rawchannel:
                print("[ABM-main][doTune] Tuner %s selected%s" %
                      (chr(ord('A') + current_slotid),
                       (" for orbital position %d" %
                        transponder["orbital_position"]
                        if "orbital_position" in transponder else "")),
                      file=log)
                break

        if not self.rawchannel:
            # if we are here the only possible option is to close the active service
            if currentlyPlayingNIM in nimList:
                print(
                    "[ABM-main][doTune] Tuner %s has been selected but it's busy. Stopping currently playing service."
                    % chr(ord('A') + currentlyPlayingNIM),
                    file=log)
                self.postScanService = self.session.nav.getCurrentlyPlayingServiceReference(
                )
                self.session.nav.stopService()
                self.rawchannel = resmanager.allocateRawChannel(
                    currentlyPlayingNIM)
                if self.rawchannel:
                    print(
                        "[ABM-main][doTune] The active service was stopped, and tuner %s is now free to use."
                        % chr(ord('A') + currentlyPlayingNIM),
                        file=log)
                    current_slotid = currentlyPlayingNIM

            if not self.rawchannel:
                if self.session.nav.RecordTimer.isRecording():
                    print(
                        "[ABM-main][doTune] Cannot free NIM because a recording is in progress",
                        file=log)
                    self.showError(
                        _('Cannot free NIM because a recording is in progress')
                    )
                    return
                else:
                    print("[ABM-main][doTune] Cannot get the NIM", file=log)
                    self.showError(_('Cannot get the NIM'))
                    return

        # set extended timeout for rotors
        self.motorised = False
        if self.providers[self.currentAction][
                "streamtype"] == "dvbs" and self.isRotorSat(
                    current_slotid, transponder["orbital_position"]):
            self.motorised = True
            self.LOCK_TIMEOUT = self.LOCK_TIMEOUT_ROTOR
            print(
                "[ABM-main][doTune] Motorised dish. Will wait up to %i seconds for tuner lock."
                % (self.LOCK_TIMEOUT // 10),
                file=log)
        else:
            self.LOCK_TIMEOUT = self.LOCK_TIMEOUT_FIXED
            print(
                "[ABM-main][doTune] Fixed dish. Will wait up to %i seconds for tuner lock."
                % (self.LOCK_TIMEOUT // 10),
                file=log)

        if not inStandby:
            self["tuner_text"].setText(chr(ord('A') + current_slotid))

        self.frontend = self.rawchannel.getFrontend()
        if not self.frontend:
            print("[ABM-main][doTune] Cannot get frontend", file=log)
            self.showError(_('Cannot get frontend'))
            return

        demuxer_id = self.rawchannel.reserveDemux()
        if demuxer_id < 0:
            print("[ABM-main][doTune] Cannot allocate the demuxer.", file=log)
            self.showError(_('Cannot allocate the demuxer.'))
            return

        if self.providers[self.currentAction]["streamtype"] == "dvbs":
            params = eDVBFrontendParametersSatellite()
            params.frequency = transponder["frequency"]
            params.symbol_rate = transponder["symbol_rate"]
            params.polarisation = transponder["polarization"]
            params.fec = transponder["fec_inner"]
            params.inversion = transponder["inversion"]
            params.orbital_position = transponder["orbital_position"]
            params.system = transponder["system"]
            params.modulation = transponder["modulation"]
            params.rolloff = transponder["roll_off"]
            params.pilot = transponder["pilot"]
            if hasattr(eDVBFrontendParametersSatellite, "No_Stream_Id_Filter"):
                params.is_id = eDVBFrontendParametersSatellite.No_Stream_Id_Filter
            if hasattr(eDVBFrontendParametersSatellite, "PLS_Gold"):
                params.pls_mode = eDVBFrontendParametersSatellite.PLS_Gold
            if hasattr(eDVBFrontendParametersSatellite,
                       "PLS_Default_Gold_Code"):
                params.pls_code = eDVBFrontendParametersSatellite.PLS_Default_Gold_Code
            if hasattr(eDVBFrontendParametersSatellite, "No_T2MI_PLP_Id"):
                params.t2mi_plp_id = eDVBFrontendParametersSatellite.No_T2MI_PLP_Id
            if hasattr(eDVBFrontendParametersSatellite, "T2MI_Default_Pid"):
                params.t2mi_pid = eDVBFrontendParametersSatellite.T2MI_Default_Pid
            params_fe = eDVBFrontendParameters()
            params_fe.setDVBS(params, False)

        elif self.providers[self.currentAction]["streamtype"] == "dvbt":
            params = eDVBFrontendParametersTerrestrial()
            params.frequency = transponder["frequency"]
            params.bandwidth = transponder["bandwidth"]
            params.code_rate_hp = transponder["code_rate_hp"]
            params.code_rate_lp = transponder["code_rate_lp"]
            params.inversion = transponder["inversion"]
            params.system = transponder["system"]
            params.modulation = transponder["modulation"]
            params.transmission_mode = transponder["transmission_mode"]
            params.guard_interval = transponder["guard_interval"]
            params.hierarchy = transponder["hierarchy"]
            params_fe = eDVBFrontendParameters()
            params_fe.setDVBT(params)

        elif self.providers[self.currentAction]["streamtype"] == "dvbc":
            params = eDVBFrontendParametersCable()
            params.frequency = transponder["frequency"]
            params.symbol_rate = transponder["symbol_rate"]
            params.fec_inner = transponder["fec_inner"]
            params.inversion = transponder["inversion"]
            params.modulation = transponder["modulation"]
            params_fe = eDVBFrontendParameters()
            params_fe.setDVBC(params)

        try:
            self.rawchannel.requestTsidOnid()
        except TypeError:
            # for compatibility with some third party images
            self.rawchannel.requestTsidOnid(self.gotTsidOnid)

        self.frontend.tune(params_fe)
        self.manager.setAdapter(0)  # FIX: use the correct device
        self.manager.setDemuxer(demuxer_id)
        self.manager.setFrontend(current_slotid)

        self.current_slotid = current_slotid
        self.lockcounter = 0
        self.locktimer = eTimer()
        self.locktimer.callback.append(self.checkTunerLock)
        self.locktimer.start(100, 1)