sobota 23. ledna 2016

Build vlastního balíčku pro Vu+ DUO2

Po delší době jsem se opět dostal k laborování s buildem balíčků pro Enigmu2 v satelitních přijímačích.

Dle popisu stačilo stáhnout z GITu aktuální verzi zdrojových kódů:

git clone git://code.vuplus.com/git/openvuplus_3.0.git
cd openvuplus_3.0
make image MACHINE=vuduo2

Nečekaně se to nepovedlo na poprvé, bylo nutné ještě doinstalovat balíčky
texinfo, libxml-libxml-perl a libsys-hostname-long-perl

Dalším krokem je vytvoření hello.c v openvuplus_3.0/meta-openvuplus/recipes-extended/hello/files

#include <stdio.h>

int main(int argc, char** argv)
{
    printf("Hello world!\n\n");
    return 0;
}


Dále je třeba vytvořit README soubor v téže umístění a jakýsi makefile o úroveň výš. A také soubor LICENCE.

touch meta-openvuplus/recipes-extended/myhelloworld/LICENSE
md5sum meta-openvuplus/recipes-extended/myhelloworld/LICENSE

Ze kterého je třeba vypočítat MD5 a tu vyplnit do souboru hello_0.1.bb


DESCRIPTION = "hello application"
PR = "r0"

LICENSE = "TEST LICENSE"
LIC_FILES_CHKSUM = "file:///home/jenda/Dokumenty/openvuplus_3.0/meta-openvuplus/recipes-extended/myhello/LICENSE;md5=d41d8cd98f00b204e9800998ecf8427e"

SRC_URI = "file://hello.c \
           file://README.txt"

do_compile() {
        ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/hello.c -o hello
}

do_install() {
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhello
        install -m 0755 ${S}/hello ${D}${bindir}
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhello
}

Poté by již mělo stačit se přesunout do umístění pro příslušný přijímač a spustit build balíčku:

cd build/vusolo2
source bitbake.env
bitbake hello


 A pokud se zadaří, tak v openvuplus_3.0/build/vuduo2/tmp/deploy/ipk/mips32el by měl být připraven hotový balíček hello_0.1-r0_mips32el.ipk.

http://code.vuplus.com/
http://blog.videgro.net/2013/05/how-to-compile-software-for-vu-plus/

čtvrtek 21. ledna 2016

Enigma 2 - Vu+ DUO2

U satelitního přijímače s FW od VTi Teamu mě rozčilovalo namapování tlačítka volby kanálu (key_up a key_down) na nelogické volby, proto přikládám návod, jak to snadno přenastavit. Stačí v sekci souboru "/usr/share/engima2/keymap.xml" InfobarChannelSelection změnit události kláves KEY_CHANNELUP na keyDown.

     <map context="InfobarChannelSelection">
        <key id="KEY_EXIT" mapto="zapHistory" flags="b" />
        <key id="KEY_LEFT" mapto="zapUp" flags="mr" />
        <key id="KEY_RIGHT" mapto="zapDown" flags="mr" />
        <key id="KEY_UP" mapto="switchChannelUp" flags="mr" />
        <key id="KEY_DOWN" mapto="switchChannelDown" flags="mr" />
        <key id="KEY_PREVIOUS" mapto="historyBack" flags="mr" />
        <key id="KEY_NEXT" mapto="historyNext" flags="mr" />
        <key id="KEY_BACK" mapto="historyBack" flags="mr" />
        <key id="KEY_FORWARD" mapto="historyNext" flags="mr" />
        <key id="KEY_CHANNELUP" mapto="keyDown" flags="m" />
        <key id="KEY_CHANNELDOWN" mapto="keyUp" flags="m" />
        <key id="BTN_0" mapto="zapUp" flags="mr" />
        <key id="BTN_1" mapto="zapDown" flags="mr" />
    </map>

Zobrazení seznamu stanic tlačítkem TV

    <map context="InfobarActions">
        <key id="KEY_VIDEO" mapto="showMovies" flags="m" />
        <key id="KEY_RADIO" mapto="showRadio" flags="m" />
        <key id="KEY_TV" mapto="showFavourites" flags="m" />
        <key id="KEY_SUBTITLE" mapto="showSubtitle" flags="m" />
    </map>


Další a maličko složitější je rychlé skočení rovnou do seznamu pořadů při zmáčknutí tlačítka EPG. Nejprve je třeba změnit soubor /usr/lib/enigma2/python/Screens/InfoBarGenerics.py.

class InfoBarSimpleEventView:
    """ Opens the Eventview for now/next """
    def __init__(self):
        self["EPGActions"] = HelpableActionMap(self, "InfobarEPGActions",
            {
                "showEventInfo": (self.openEventView, _("show EPG...")),
                "showEventInfoPlugin": (self.showEventInfoPlugins, _("show single service EPG...")),
                "showInfobarOrEpgWhenInfobarAlreadyVisible": self.showEventInfoWhenNotVisible,
                "showSingleServiceEPG": (self.openSingleServiceEPG, _("show single service EPG...")),
            })

    def showEventInfoWhenNotVisible(self):
        if self.shown:
            self.openEventView()
        else:
            self.toggleShow()
            return 1
A dále si namapovat příslušnou událost na tlačítko, opět tedy v souboru keymap.xml

    <map context="InfobarEPGActions">
        <key id="KEY_INFO" mapto="showSingleServiceEPG" flags="b" />
        <key id="KEY_INFO" mapto="showSingleServiceEPG" flags="l" />
    </map>