This one was commited: https://github.com/satdreamgr/SDGRad...f0d82180902776
This one was commited: https://github.com/satdreamgr/SDGRad...f0d82180902776
Member SatDreamGr Projects
Wavefield T90: 0.8W - 1.9E - 4.8E - 13E - 16E - 19.2E - 23E - 26E - 33E - 39E - 42E - 45E on EMP Centauri DiseqC 16/1
Unamed: 13E Quattro - 9E Quattro on IKUSI MS-0916
Member SatDreamGr Projects
Wavefield T90: 0.8W - 1.9E - 4.8E - 13E - 16E - 19.2E - 23E - 26E - 33E - 39E - 42E - 45E on EMP Centauri DiseqC 16/1
Unamed: 13E Quattro - 9E Quattro on IKUSI MS-0916
I have to add a screen to display the information of the buttons with the help button
In red the changes
Code:from Components.AVSwitch import AVSwitch from Components.ActionMap import ActionMap from Components.Label import Label from Components.Pixmap import Pixmap from Components.config import config, ConfigSubsection, ConfigText, ConfigInteger, ConfigBoolean, ConfigSelection from Plugins.Plugin import PluginDescriptor from Screens.Console import Console from Screens.MessageBox import MessageBox from Screens.Screen import Screen from Tools.BoundFunction import boundFunction from enigma import eConsoleAppContainer from enigma import getDesktop from Components.Sources.StaticText import StaticText from Components.ScrollLabel import ScrollLabel import json import time from decimal import Decimal config.sdgradio = ConfigSubsection() config.sdgradio.last = ConfigText(default = "87.5") config.sdgradio.lastbutton = ConfigInteger(default = 0, limits = (0, 9)) config.sdgradio.a = ConfigText(default = "87.5") config.sdgradio.b = ConfigText(default = "89.0") config.sdgradio.c = ConfigText(default = "94.0") config.sdgradio.d = ConfigText(default = "96.0") config.sdgradio.e = ConfigText(default = "98.0") config.sdgradio.f = ConfigText(default = "98.0") config.sdgradio.g = ConfigText(default = "100.0") config.sdgradio.h = ConfigText(default = "102.0") config.sdgradio.i = ConfigText(default = "107.0") config.sdgradio.j = ConfigText(default = "108.0") config.sdgradio.rds = ConfigBoolean(default = False) config.sdgradio.modulation = ConfigSelection(choices=[("fm", _("FM")),("wfm", _("WFM")),("nfm", _("NFM")), ("am", _("AM")), ("nam", _("NAM")), ("lsb", _("LSB")), ("usb", _("USB"))], default="fm") try: from enigma import addFont addFont('/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/fonts/mssdr-digitali.ttf', 'Digital', 90, 1) except: print "[SDGRadio] failed to add font" BTN_MEM_DOWN = "/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/btn_mem_0%d_down.png" BTN_MEM_UP = "/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/btn_mem_0%d_up.png" class SDGRadioScreen(Screen): skin=""" <screen name="SDGRadioScreen" position="center,center" size="1280,720" title="SDG Radio" backgroundColor="transparent" flags="wfNoBorder"> <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/radio-frequency.png" position="310,120" size="828,500" zPosition="-1"/> <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/remote.png" position="140,120" size="150,500" alphatest="on" zPosition="1" /> <widget name="mem_0" position="201,302" size="26,26" alphatest="blend" zPosition="2" /> <widget name="mem_1" position="155,174" size="26,26" alphatest="blend" zPosition="2" /> <widget name="mem_2" position="201,174" size="26,26" alphatest="blend" zPosition="2" /> <widget name="mem_3" position="248,174" size="26,26" alphatest="blend" zPosition="2" /> <widget name="mem_4" position="155,216" size="26,26" alphatest="blend" zPosition="2" /> <widget name="mem_5" position="201,216" size="26,26" alphatest="blend" zPosition="2" /> <widget name="mem_6" position="248,216" size="26,26" alphatest="blend" zPosition="2" /> <widget name="mem_7" position="155,259" size="26,26" alphatest="blend" zPosition="2" /> <widget name="mem_8" position="201,259" size="26,26" alphatest="blend" zPosition="2" /> <widget name="mem_9" position="248,259" size="26,26" alphatest="blend" zPosition="2" /> <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/left.png" position="155,302" size="26,26" zPosition="2" alphatest="blend"/> <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/right.png" position="248,302" size="26,26" zPosition="2" alphatest="blend"/> <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/plus.png" position="155,506" size="26,26" zPosition="2" alphatest="blend"/> <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/min.png" position="155,549" size="26,26" zPosition="2" alphatest="blend"/> <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/exit.png" position="201,506" size="26,26" zPosition="2" alphatest="blend"/> <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/epg.png" position="201,549" size="26,26" zPosition="2" alphatest="blend"/> <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/plus.png" position="248,506" size="26,26" zPosition="2" alphatest="blend"/> <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/min.png" position="248,549" size="26,26" zPosition="2" alphatest="blend"/><eLabel name="Select Mem" text="Select Mem" position="140,130" size="150,35" foregroundColor="white" font="Regular; 22" zPosition="5" halign="center" transparent="1" backgroundColor="#000000"/> <eLabel name="Tune Freq" text="Tune Freq" position="140,350" size="150,35" foregroundColor="white" font="Regular; 22" zPosition="5" halign="center" transparent="1" backgroundColor="#000000"/> <eLabel name="OK" text="OK" position="140,425" size="150,50" foregroundColor="white" font="Regular;24" zPosition="5" halign="center" transparent="1" backgroundColor="#000000"/> <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/red48x48.png" position="340,560" size="48,48" alphatest="blend"/> <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/green48x48.png" position="490,560" size="48,48" alphatest="blend"/> <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/blue48x48.png" position="640,560" size="48,48" alphatest="blend"/> <widget name="key_red" position="390,560" size="150,48" backgroundColor="#000000" zPosition="1" transparent="1" font="Regular; 22" valign="center" halign="left" foregroundColor="#ffffff" /> <widget name="key_green" position="540,560" size="150,48" backgroundColor="#000000" zPosition="1" transparent="1" font="Regular; 22" valign="center" halign="left" foregroundColor="#ffffff" /> <widget name="key_blue" position="690,560" size="150,48" backgroundColor="#000000" zPosition="1" transparent="1" font="Regular;22" valign="center" halign="left" foregroundColor="#ffffff" /> <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/SDGRadio/img/exit2.png" position="1040,560" size="48,48" alphatest="blend"/> <eLabel text="Exit" position="1090,560" size="150,48" foregroundColor="white" font="Regular; 22" zPosition="5" valign="center" halign="left" transparent="1" backgroundColor="#000000"/> <widget source="Title" render="Label" position="310,270" size="828,50" halign="center" backgroundColor="#000000" transparent="1" font="Regular;40" foregroundColor="#bab329" /> <widget name="freq" position="310,450" size="828,90" halign="center" zPosition="2" foregroundColor="#bab329" font="Digital;80" transparent="1" backgroundColor="#000000" /> <widget name="prog_type" position="310,330" size="828,40" halign="center" zPosition="2" foregroundColor="#bab329" font="Regular;32" transparent="1" backgroundColor="#000000"/> <widget name="radiotext" position="310,380" size="828,40" halign="center" zPosition="2" foregroundColor="#bab329" font="Regular;32" transparent="1" backgroundColor="#000000"/> <widget source="global.CurrentTime" render="Label" position="325,245" size="240,45" font="Regular;32" valign="top" halign="left" foregroundColor="#008cff" backgroundColor="#000000" transparent="1"> <convert type="ClockToText">Format:%d.%m.%Y</convert> </widget> <widget source="global.CurrentTime" render="Label" position="925,245" size="150,45" font="Regular;32" valign="top" halign="right" foregroundColor="#008cff" backgroundColor="#000000" transparent="1"> <convert type="ClockToText">Default</convert> </widget> <widget source="global.CurrentTime" render="Label" position="1075,245" size="95,45" font="Regular;24" valign="top" halign="left" foregroundColor="#008cff" backgroundColor="#000000" transparent="1"> <convert type="ClockToText">Format::%S</convert> </widget> </screen>""" def __init__(self, session): Screen.__init__(self, session) for i in range(0,10): self["mem_%d" % i] = Pixmap() self["freq"] = Label() self["radiotext"] = Label() self["prog_type"] = Label() self["key_red"] = Label(config.sdgradio.modulation.getText()) self["key_green"] = Label(_("Save")) self["key_blue"] = Label(_("Log")) self["info"] = Label(_("Info")) # get currently playing service self.oldService = self.session.nav.getCurrentlyPlayingServiceReference() # stop currently playing service self.session.nav.stopService() # log messages self.log = [] # display radio mvi eConsoleAppContainer().execute("showiframe /usr/share/enigma2/radio.mvi") #self.Scale = AVSwitch().getFramebufferScale() self["actions"] = ActionMap(["HelpActions","SetupActions", "DirectionActions", "WizardActions", "ColorActions", "MenuActions", "ChannelSelectEPGActions", "InfobarSubserviceQuickzapActions", "ChannelSelectBaseActions" ], { "back": self.cancel, # add the RC Command "cancel" to close your Screen "0": boundFunction(self.buttonNumber, 0), "1": boundFunction(self.buttonNumber, 1), "2": boundFunction(self.buttonNumber, 2), "3": boundFunction(self.buttonNumber, 3), "4": boundFunction(self.buttonNumber, 4), "5": boundFunction(self.buttonNumber, 5), "6": boundFunction(self.buttonNumber, 6), "7": boundFunction(self.buttonNumber, 7), "8": boundFunction(self.buttonNumber, 8), "9": boundFunction(self.buttonNumber, 9), "upUp": self.ok, "downUp": self.ok, "rightUp": self.ok, "leftUp": self.ok, "ok": self.ok, "up": boundFunction(self.stepup, "0.010"), "down": boundFunction(self.stepdown, "0.010"), "right": boundFunction(self.stepright, "1"), "left": boundFunction(self.stepleft, "1"), "upRepeated": boundFunction(self.up, "0.010"), "downRepeated": boundFunction(self.down, "0.010"), "leftRepeated": boundFunction(self.left, "1"), "rightRepeated": boundFunction(self.right, "1"), "nextBouquet": boundFunction(self.nextB, "0.0001" ), "prevBouquet": boundFunction(self.prevB, "0.0001"), "nextMarker": boundFunction(self.nextM, "0.001" ), "prevMarker": boundFunction(self.prevM, "0.001" ), "info": self.info, "red": self.red, "green": self.green, "blue": self.blue, "displayHelp": self.aboutSDG, }, -1) self.Console = None self.onLayoutFinish.append(self.ShowPicture) def PlayRadio(self, freq): self.doConsoleStop() time.sleep(0.5) self.Console = eConsoleAppContainer() #self.Console.dataAvail.append(self.cbDataAvail) self.Console.stderrAvail.append(self.cbStderrAvail) #self.Console.appClosed.append(self.cbAppClosed) if config.sdgradio.modulation.value == "wfm": cmd = "rtl_fm -f %sM -M fm -l 0 -A std -s 171k -g 40 -E deemp -F 0 - | redsea -e | gst-launch-1.0 fdsrc ! audio/x-raw, format=S16LE, channels=1, layout=interleaved, rate=171000 ! audioresample ! audio/x-raw, format=S16LE, channels=1, layout=interleaved, rate=48000 ! dvbaudiosink" % freq elif config.sdgradio.modulation.value == "nfm": cmd = "rtl_fm -f %sM -M fm -A std -s 12k -g 40 - | gst-launch-1.0 fdsrc ! audio/x-raw, format=S16LE, channels=1, layout=interleaved, rate=12000 ! audioresample ! audio/x-raw, format=S16LE, channels=1, layout=interleaved, rate=48000 ! dvbaudiosink" % freq elif config.sdgradio.modulation.value == "am": cmd = "rtl_fm -f %sM -M am -A std -s 10k -g 40 - | gst-launch-1.0 fdsrc ! audio/x-raw, format=S16LE, channels=1, layout=interleaved, rate=10000 ! audioresample ! audio/x-raw, format=S16LE, channels=1, layout=interleaved, rate=48000 ! dvbaudiosink" % freq elif config.sdgradio.modulation.value == "nam": cmd = "rtl_fm -f %sM -M am -A std -s 5k -g 40 - | gst-launch-1.0 fdsrc ! audio/x-raw, format=S16LE, channels=1, layout=interleaved, rate=5000 ! audioresample ! audio/x-raw, format=S16LE, channels=1, layout=interleaved, rate=48000 ! dvbaudiosink" % freq elif config.sdgradio.modulation.value == "lsb": cmd = "rtl_fm -f %sM -M lsb -A std -s 3k -g 40 - | gst-launch-1.0 fdsrc ! audio/x-raw, format=S16LE, channels=1, layout=interleaved, rate=3000 ! audioresample ! audio/x-raw, format=S16LE, channels=1, layout=interleaved, rate=48000 ! dvbaudiosink" % freq elif config.sdgradio.modulation.value == "usb": cmd = "rtl_fm -f %sM -M usb -A std -s 3k -g 40 - | gst-launch-1.0 fdsrc ! audio/x-raw, format=S16LE, channels=1, layout=interleaved, rate=3000 ! audioresample ! audio/x-raw, format=S16LE, channels=1, layout=interleaved, rate=48000 ! dvbaudiosink" % freq else: cmd = "rtl_fm -f %sM -M wbfm -s 200000 -r 48000 - | gst-launch-1.0 fdsrc ! audio/x-raw, format=S16LE, channels=1, layout=interleaved, rate=48000 ! dvbaudiosink" % freq print "[SDGRadio] PlayRadio cmd: %s" % cmd self.Console.execute(cmd) def RDSProcess(self, data): try: rds = json.loads(data) if "ps" in rds and self.getTitle() != rds["ps"].encode('utf8'): self.setTitle(rds["ps"].encode('utf8')) if "radiotext" in rds and self["radiotext"].getText() != rds["radiotext"].encode('utf8'): self["radiotext"].setText(rds["radiotext"].encode('utf8')) if "partial_radiotext" in rds and self["radiotext"].getText() != rds["partial_radiotext"].encode('utf8'): self["radiotext"].setText(rds["partial_radiotext"].encode('utf8')) if "prog_type" in rds and self["prog_type"].getText() != rds["prog_type"].encode('utf8'): self["prog_type"].setText(rds["prog_type"].encode('utf8')) except Exception as e: print "[SDGRadio] RDSProcess Exception: %s" % e def cbStderrAvail(self, data): #print "[SDGRadio] cbStderrAvail ", data if "{" in data and "}" in data and ":" in data: self.RDSProcess(data) self.log.append(data) if len(self.log) > 20: self.log.pop(0) def cbDataAvail(self, data): print "[SDGRadio] cbDataAvail %s" % data self.log.append(data) if len(self.log) > 15: self.log.pop() def doConsoleStop(self): if self.Console: self.Console.sendCtrlC() self.Console.sendEOF() if self.Console.running(): self.Console.kill() self.Console = None self.log = [] def ShowPicture(self): self.startup() def ButtonSelect(self, number, freq): self["freq"].setText(freq) self["radiotext"].setText("") self["prog_type"].setText("") self.setTitle("SDG Radio %s" % freq) self.PlayRadio(freq) config.sdgradio.last.value = freq config.sdgradio.last.save() for i in range(0, 10): if i == number: config.sdgradio.lastbutton.value = i config.sdgradio.lastbutton.save() self["mem_%d" % i].instance.setPixmapFromFile(BTN_MEM_DOWN % i) else: self["mem_%d" % i].instance.setPixmapFromFile(BTN_MEM_UP % i) def buttonNumber(self, number): print "[SDGRadio] buttonNumber %d" % number freq = eval("config.sdgradio.%s.value" % chr(97+number)) self.ButtonSelect(number, freq) def freqChange(self, value): freq = self["freq"].getText() newfreq = Decimal(freq) + value if config.sdgradio.modulation == "fm": if newfreq < Decimal("87.5"): newfreq = Decimal("87.5") if newfreq > Decimal("108.0"): newfreq = Decimal("108.0") else: if newfreq < Decimal("0.0"): newfreq = Decimal("0.0") if newfreq > Decimal("1766.0"): newfreq = Decimal("1766.0") self["freq"].setText(str(newfreq)) def stepup(self, value): self.freqChange(Decimal(value)) def stepdown(self, value): self.freqChange(-Decimal(value)) def up(self, value): self.freqChange(Decimal(value)) def down(self, value): self.freqChange(-Decimal(value)) def stepleft(self, value): self.freqChange(-Decimal(value)) def stepright(self, value): self.freqChange(Decimal(value)) def left(self, value): self.freqChange(-Decimal(value)) def right(self, value): self.freqChange(Decimal(value)) def nextB(self, value): self.freqChange(Decimal(value)) self.ok() def prevB(self, value): self.freqChange(-Decimal(value)) self.ok() def nextM(self, value): self.freqChange(Decimal(value)) self.ok() def prevM(self, value): self.freqChange(-Decimal(value)) self.ok() def ok(self): freq = self["freq"].getText() lastfreq = config.sdgradio.last.value if Decimal(freq) != Decimal(lastfreq): self.ButtonSelect(config.sdgradio.lastbutton.value, freq) def red(self): print "[SDGRadio] red" config.sdgradio.rds.value = not config.sdgradio.rds.value config.sdgradio.rds.save() config.sdgradio.modulation.selectNext() if config.sdgradio.rds.value: self["key_red"].setText(config.sdgradio.modulation.getText()) else: self["key_red"].setText(config.sdgradio.modulation.getText()) self.doConsoleStop() self.startup() def green(self): print "[SDGRadio] green" freq = self["freq"].getText() lastbutton = config.sdgradio.lastbutton.value if lastbutton >=0 and lastbutton <= 9: current_config = eval("config.sdgradio.%s" % chr(97+lastbutton)) current_config.value = freq current_config.save() self.ButtonSelect(lastbutton, freq) self.session.open(MessageBox, _("Save"), MessageBox.TYPE_INFO, timeout = 5, close_on_any_key = True) def startup(self): self.ButtonSelect(config.sdgradio.lastbutton.value, config.sdgradio.last.value) def cancel(self): print "[SDGRadio] cancel" self.doConsoleStop() config.sdgradio.last.save() config.sdgradio.lastbutton.save() config.sdgradio.save() self.close(False, self.session) self.session.nav.playService(self.oldService) def info(self): print "[SDGRadio] info" self.doConsoleStop() self.session.open(Console,_("Info"),["sleep 0.5 && rtl_eeprom"]) def blue(self): print "[SDGRadio] blue" text = "".join(self.log) self.session.open(Console,_("Log"),["cat << EOF\n%s\nEOF" % text]) def aboutSDG(self): Message = "Informations........." Message += "\n\n" Message += "Key Red = blabla" self.session.open(Mytexte, text = Message, title = "SDGRadio Helper") class Mytexte(Screen): skin = """ <screen name="TextOut" position="center,center" size="620,450" transparent="0" title="TextOut..."> <widget name="text" position="center,center" size="610,400" transparent="0" font="Regular;20" /> <!--widget source="text" render="Label" position="0,0" size="900,540" font="Regular;20" /--> </screen>""" def __init__(self, session, text = "", title = ""): Screen.__init__(self, session) self.text = text self.newtitle = title self["text"] = ScrollLabel(self.text) self["actions"] = ActionMap(["OkCancelActions", "DirectionActions"], { "cancel": self.cancel, "ok": self.ok, "up": self["text"].pageUp, "down": self["text"].pageDown, }, -1) self["title"] = StaticText() self.onShown.append(self.updateTitle) def updateTitle(self): self.setTitle(self.newtitle) self["title"].setText(self.newtitle) def ok(self): self.close() def cancel(self): self.close() def main(session, **kwargs): session.open(SDGRadioScreen) def Plugins(**kwargs): return PluginDescriptor(name="Enigma2 Radio", description="Software Defined Radio", where = PluginDescriptor.WHERE_PLUGINMENU, needsRestart=False, icon="img/sdgradio.png", fnc=main)
Member SatDreamGr Projects.
....................................
Orbital Position = 5W - 3E - 9E - 13E - 19E.
....................................
Satellite Receivers = Edision OS Mio 4K -- Edision OS Nino+ -- Edision OS Mini -- Edision OS Mega -- Medi@link IXUSS ZERO -- Dm 7020HD -- Vu+ Solo 2 -- Octagon SF4008 Triple 4K.
....................................
Module = CI+ Fransat.
....................................
Tuner Card = TBS5925.
....................................
Images = SatDreamGr.
Update V10
Again attempt to get more stability in Tuner work
Added Help info (thanks @davilcosta Satdreamgr forum)
http://www.vuplus-community.net/boar...-2#post-227277
Update V11
Added experimental Scan Amateur 2M band (stop freq 146 Mhz ) , 70 cm band (stop freq 431 Mhz)
Air Band1 (Stop freq 123 Mhz) Air Band 2 ( Stop Freq 128 Mhz)
First Tune Start Freq than Scan band.
All this you can change/mod in command line plugin.py
rtl_fm -M am -f %M:137M:25k -s 12k -g 50 -l 280
•-M am AM demodulation
•-f (varibale start freq):stop(here:137Mhz) :interval a range of frequencies to scan
•25k (channels space)
•-s 12k same as above (modulatie BW)
•-g 50 same as above (gain)
•-l 280 squelch level, exact value varies a lot
http://www.vuplus-community.net/boar...-2#post-227572
Test V12
different way to scan
With this version you can scan any frequency and band 1 Mhz wide
am (narrow AM) and FM (narrow FM)
Scan band is + 1 MHz wide. , and automatically activated if you use ScanAM,ScanFM, or ScanFM2
======================================================================================
1. Tune Scan >> start freq
2. Key Red >> Select Scan modulation ScanAM (narrow step 10Khz) or ScanFM (narrow step 10 Khz) or ScanFM2 (narrow step 25 Khz)"
================================================================================================
For scan is very important to set correct -l squelch level
in command line plugin.py, exact value varies a lot.
You can edit if you like all this options in plugin.py
def PlayRadio(self, freq):
http://www.vuplus-community.net/boar...-2#post-227572
Been reading this topic about Rtl-sdr.
Is there a way to get this working in openpli with vuzero
Or a howto install?
Pauluzs
this plugin is preinstalled in satdreamgr image.
otherwise,i think it will work if you will install manual,the file that matrix10 is giving
ολα ειναι FLU
Member SatDreamGr Projects
Athoik is weird that we have very little interest from E2 coders for this USB dongle
and he can do so much.
Is it possible to do something for the DAB+ radio?
There are some projects that include DAB/DAB+ tools, but unfortunately in Greece we do not have DAB/DAB+ to play with.
Although I am not sure if power on old mips machines is enough. I read on several forums, that DAB/DAB+ requires a lot power to demodulate the raw samples.
Are you running successfully DAB/DAB+ on Linux desktop? With what tools?
Member SatDreamGr Projects
Wavefield T90: 0.8W - 1.9E - 4.8E - 13E - 16E - 19.2E - 23E - 26E - 33E - 39E - 42E - 45E on EMP Centauri DiseqC 16/1
Unamed: 13E Quattro - 9E Quattro on IKUSI MS-0916
There are currently 6 users browsing this thread. (0 members and 6 guests)