1. Cookies optimieren die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklärst Du dich damit einverstanden, dass wir Cookies verwenden. Weitere Informationen
    Information ausblenden
  2. Willkommen im Forum von DIGITAL FERNSEHEN - dem führenden Portal für digitales Fernsehen, Medien und Entertainment. Wenn du hier neu bist, schau dich ruhig etwas um und melde dich an, um am Forengeschehen teilnehmen zu können.
    Information ausblenden

3. HowTo: Relook Programmierung am Beispiel des USB On/Off von neumo

Dieses Thema im Forum "Palcom / Panasonic / Radix / Relook / Smart" wurde erstellt von 99kamele, 12. Juli 2005.

  1. 99kamele

    99kamele Junior Member

    Registriert seit:
    20. April 2005
    Beiträge:
    119
    Zustimmungen:
    0
    Punkte für Erfolge:
    26
    Anzeige
    3. HowTo: Relook Programmierung am Beispiel des USB On/Off von neumo

    Im diesem HowTo will ich am Beispiel von neumo Sourcen einmal auf die Programmierung eines grafischen Elements eingehen. Wer sich nun fragt, warum ich mir gerade neumos „USB On/Off" genommen habe, dem gebe ich eine einfache Antwort: Er hat seien Änderungen im Quellcode gekennzeichnet und somit sind sie für jedermann ersichtlich. Außerdem sind sie noch nicht zu komplex und bieten sich somit als gutes Beispiel an.


    CMS Menü

    Im Gegensatz zu anderen Menüs z.B Favoriten-Menü und -Popupmenü, gibt es vom CMS Menü keine weiteren Varianten, wo Änderungen eingefügt werden müssen. Abgebildet wird das Menü in „cms.c". Die Dateien "cms.h", "cmsrec.h" und "cmsdeletepopup.h" sind erstmal uninteressant.

    Als erstes sollte man sich verdeutlichen, dass es drei verschieden Aktionen gibt. Einmal das Anzeigen im OSD-Menü des Status (OFF oder ON), dann die dazugehörige, im Hintergrund auszuführende softwaremäßige Aktivierung des USB Ports. Als drittes sind die Aktionen der Fernbedienung zu hinterlegen.


    Funktionen, Variable, etc.

    Im oberen Bereich der „cms.c" werden zunächst die Präprozessorbefehle, Variablen, etc. definiert. Hier wird als erstes, das interne softwareseitens Aus- und Einschalten des USB Port als Makro #define USB_EVENT definiert. Die auf der rechten Seite dahinter gestellte "4" stellt die Fortführung für die Menüeinträge (rechte Seite) dar. Sprich wenn man USB ON/OFF mit OK anklickt, wird eine "4" vom System zurückgegeben.


    Im weitern Verlauf werden Variablen definiert, die für das Anzeigen im OSD Menü benötigt werden.

    int file_storage_loaded = 0; // eine Variable mit dem Status „aus (0) und ein (1)" wird definiert und auf null (0), also „aus" gesetzt

    char* file_storage_title[2]={"USB OFF","USB ON"}; // ein Feld (array) mit dem ersten Eintrag "USB OFF" (file_storage_title[0]) und dem zweiten „USB ON" (file_storage_title[1]) wird erstellt


    Die Funktion void initCMSMenu(U32 event) „sammelt" alle Anzeigetexte des CMS Menüs. Der für uns interessante Aufruf ist weiter untern gelistete und sieht folgendermaßen aus:

    CMS_EVENT_MENU_Title[4] = file_storage_title[file_storage_loaded]; // Anzeigen des Status (USB OFF oder USB ON) als vierten Eintag im CMS_EVENT_MENU_Title. Das CMS_EVENT_MENU_Title ist eigentlich ein weiters array ( char *CMS_EVENT_MENU_Title[5]) und dient wie oben schon gesagt, nur als Container für die entsprechenden Anzeigetexte.


    Die softwareseitige Aktion des Aus- und Einschaltens des USB Ports ist in folgender Funktion hinterlegt.

    void CMSToggleUSBMode (void)
    {

    if(file_storage_loaded) // wenn der USB Port eingeschaltet ist (file_storage_lodaded = 1), wird folgendes ausgeführt

    {
    system("rmmod g_file_storage");
    system("rmmod pdiusbd12_udc"); // unmount des USB Treibers
    file_storage_loaded = 0; // setze die Variable auf aus (0)
    }

    else // wenn der USB Port ausgeschaltet ist (file_storage_lodaded = 0), wird folgendes ausgeführt

    {
    system("insmod pdiusbd12_udc");
    system("insmod g_file_storage \"file=/dev/ide/host0/bus0/target0/lun0/disc\""); // mount des USB Treibers ins System
    file_storage_loaded = 1; // setze die Variable auf ein (1)
    }
    CMS_EVENT_MENU_Title[4] = file_storage_title[file_storage_loaded]; // die Änderungen des Status werden aktualisiert
    DrawCMSEvent(); // ruft die Funktion DrawCMSEvent auf, um das CMS Menü grafisch (Position, Hintergrundfarbe, etc) aufzubauen und anzuzeigen
    UpdateCMSEvent(); // ruft die Funktion UpdateCMSEvent auf, die das CMS Menü zu aktualisiert
    }


    Es gibt 2 Möglichkeiten die USB Funktion über die Fernbedienung aus/einzuschalten:
    1. Blaue Taste drücken
    2. Im CMS Menü rechts unten auf USB OFF/ON gehen
    Bei beiden Eingabemethoden wird immer die gleiche Funktion aufgerufen, die den USB Port an bzw. ausstellt. Es ist halt ein Toggle.


    Die Eingaben auf der Fernbedienung werden in der Funktion int CMSKeyProcess(U32 ev) abgefangen.

    case KEY_BLUE: // wenn der "blaue" Knopf gedrückt wird, dann wird nachfolgendes aufgerufen
    CMSToggleUSBMode(); // die Funktion wird aufgerufen, um den USB Port ein oder auszuschalten.
    return 1;


    Weiter unten in der "cms.c" Datei sind weiter Aufrufe des Aus- und Einschaltprozesses, wie der nachfolgend aufgeführte zu finden.

    case USB_EVENT: // wenn der Inhalt des Makros zutrifft, dann nachfolgendes ausführen. Das Makro ist eigentlich gar kein richtiges da es nur prüft, ob das Element "4" angewählt" wurde um dann entsprechend zu reagieren, wenn man mit der Fernbedienung auf ON/OFF geht
    CMSToggleUSBMode(); // die Funktion wird aufgerufen, um den USB Port ein oder auszuschalten
    return 1;


    Wenn man sich nun fragt, warum eigentlich erst ein Makro definiert wird, dass dann doch nur einen Rückgabewert beinhaltet zitiere ich nun neumo "Es ist immer unschön direkt mit Zahlen zu arbeiten, daher habe ich für die "4" den Namen USB_EVENT als define eingeführt." An dieser Stelle nochmals Dank für die Infos.


    Ich hoffe, dass nunmehr jedem dieser Part von neumos Änderungen verständlich ist. Natürlich kann hier nicht die ganze "Wahrheit" des C Programmierens erklärt werden, aber zumindest hat man einen Einblick wie DGS den Sourcecode aufgebaut hat und man diesen ändern kann.


    Viel Spaß

    Dirk
     
    Zuletzt bearbeitet: 12. Juli 2005
  2. JonDoe

    JonDoe Junior Member

    Registriert seit:
    13. Mai 2005
    Beiträge:
    150
    Zustimmungen:
    0
    Punkte für Erfolge:
    26
    AW: 3. HowTo: Relook Programmierung am Beispiel des USB On/Off von neumo

    @99kamele

    Sehr schön.

    Gruß Robert