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
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)
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
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
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
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)
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
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)
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)
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)
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)
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 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
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)
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
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)
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
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 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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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' # 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)
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)
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)