TOPFIELD - Multimedia Home Gateway
Home Produkte Support Downloads Taps Forum News Presse Kontakt Händlersuche Jobs Topfield eStore

Zurück   TOPFIELD EUROPE Forum > Topfield-Modding > TF 5x00/6000 PVR TAP
Registrieren Hilfe Benutzerliste Kalender Suchen Heutige Beiträge Alle Foren als gelesen markieren

TF 5x00/6000 PVR TAP Zusatz-Programme für Receiver der 5000er und 6000er Serie. Hier geht's um alles, was mit den TAP Anwendungen für den PVR5x00/6000 zu tun hat.

Antwort
 
Themen-Optionen
Alt 21.03.2006, 22:41:33   #1
ICTag
Erfahrener Benutzer
 
Registriert seit: 09.12.2005
Ort: Baden-Württemberg
Receiver: Topfield 5000 PVR (and no looking back)
Firmware: Sept 2005ph Firmware wieder
Beiträge: 154
Idee Kochbuch: Tap starten ohne zu blockieren?

Hallo,


Diese Vorschlag ist in einem anderen Forum entstanden als wir diskutierten wie man einem Tap erstellen könnten, der andere Taps startet. Aber der Grund für diese Wünsch ist eigentlich, dass man den Topf sofort bedienen will, ohne auf den Auto-startendem Taps zu warten.

Diese Vorschlag beschreibt wie man ein Tap leicht umprogrammieren kann, damit es unauffällig startet.

Es basiert auf folgenden Prämisse:
  1. Ein Tap hat ein Initialisierungsroutine der lange dauern darf, solange es die Bedienung der Topf nicht verhindert
  2. Dieses kann man ermöglichen, in dem man bei jedem Zeit-intensiven Aktion die Kontrolle an der Topf OS zurückgibt damit Tastendrücke von Topf abarbeitet werden. z.B. Wenn innerhalb eine Schleife bei jedem Durchlauf die Kontrolle an der Topf OS kurzzeitig übergeben wird.
  3. Der Tap selbst darf nicht normal arbeiten (also keine Tastendrücke selbst bearbeiten) bis der Initialisierung vorbei ist
  4. Am Ende der Initialisierung schaltet der Tap um und funktioniert wie normal.

Und hier der Rezept:

1) Man erstellt einen Ersatz-Funktion für einer (oder mehrere) verwendeten TAP APIs (z.B. TAP_MemAlloc oder TAP_HDD_Fread) und macht ein Redirect auf diesem Funktion. Es macht nur Sinn ein TAP API zu wählen der innerhalb einem Schleife aufgerufen wird. Diese neue Routine enthält einem Aufruf von TAP_SystemProc damit die Kontrolle kurzzeitig an der Topf OS geht.
Code:
new_TAP_HDD_Fread(..)
{
   TAP_SystemProc();
   orig_TAP_HDD_Fread(...);
}
2) Man erstellt ein Redirekt auf diesem neuen Funktion.

Code:
TAP_main
{
orig_TAP_HDD_Fread = &TAP_HDD_Fread;
TAP_HDD_Fread = &new_TAP_HDD_Fread;
...
}
3. Man erstellt ein Idle_Handler extra für das Initialisierung, der nichts tut außer der Initialisierung aufzurufen. Der Key_Handler tut nichts. Ein Funktionspointer erlaubt, dass dieses nach der Initialisierung ersetzt wird.

Code:
TAP_main
{ 
   g_Idle_handler = &init_idle_handler;
   g_Key_handler = &init_key_handler;
}

TAP_EventHandler( ... )
{
	if ( event == EVT_IDLE )
		return g_Idle_Handler( ...);

	if ( event == EVT_KEY )
		return g_Key_Handler( ...);

	return dwParam1;
}

init_key_handler (..)
{
}

init_event_handler (..)
{
   if !g_started // forbid reentry
      init( );
}

init()
{ 
   g_started = TRUE;
   for ...
      ...
      TAP_HDD_Fread(..);
      ....
}
4. Am ende der Initialisierungsroutine werden alle Redirects gelöscht.

Code:
init
{
....
// init aufraümen
g_Idle_Handler  = &normal_idle_handler;
g_ Key_Handler = &normal_key_handler;
TAP_HDD_Fread = old_TAP_hdd_Fread;
}
----------------------------


Das gute an diesem Algorithmus ist, dass man eine bestehende Tap schnell ändern kann ohne in der Tap-Logik einzugreifen. Es ist generisch anwendbar.

Ich habe es mit Lucky B's Geburtstagskalendar Tap ausprobiert um zu sehen ob es wirkt und es hat doch funktioniert. Ich konnte der Tap Bedienung während die Initialisierung lief Übrigens, ich habe diese Tap nur verwendet, weil der Source-Code verfügbar ist, nicht weil es der Topf beim Starten verhindert. Ich musste soger eine zusätzliche Schleife einbauen, damit Lucky's Initialisierung langsam genug war um es zu merken.


(An dieser Stelle eine dicke Willkommen an Lucky zu diese Forum Ich habe zufällig gesehen, dass er vor einer Woche hier angemeldet hat. Geburtstagkalendar war das erste Tap das ich ausprobiert habe und es ist immer noch in meinem Autostart)

Also, jetzt - Frage an Euch. Es ist immer komplizierte als man denkt. Was habe ich in diesem Methodik übersehen?

Gruß,
ICTag

PS: Es könnte sein, dass ein billig Version diese Algorithmus wäre einfach eine TAP_SystemProc aufzurufen innerhalb jedem Schleife im Initialisierungsroutine?
__________________
Auto TAPs : Fastskip, Geburtstag, JAG_EPG, Improbox Premium, TF5000 Display, Filer.
Sonstige TAPs: UK OZ Surfer, Plasma EPG,
TAP commander.

Geändert von ICTag (21.03.2006 um 22:58:59 Uhr).
ICTag ist offline   Mit Zitat antworten
Alt 22.03.2006, 09:30:58   #2
Harvey
iTina-Promoter und Kuhinteressent
 
Benutzerbild von Harvey
 
Registriert seit: 11.12.2005
Ort: Planet Erde, Milchstraße
Receiver: 0x1388 PVR
Firmware: 13.09.2005
Beiträge: 3.053
Standard

Zitat:
Zitat von ICTag
PS: Es könnte sein, dass ein billig Version diese Algorithmus wäre einfach eine TAP_SystemProc aufzurufen innerhalb jedem Schleife im Initialisierungsroutine?
Innerhalb von TAP_EventHandler wäre das ein Ersatz.
Was innerhalb von TAP_Main passieren würde weiß ich nicht.
Laut Doku sollte man übrigens TAP_SystemProc in TSR-TAPs nicht aufrufen (also solche, die TAP_EventHandler aufrufen).
__________________
Gruss
Harvey

Harvey ist offline   Mit Zitat antworten
Alt 22.03.2006, 10:32:23   #3
Happy
TAP-Guru
 
Benutzerbild von Happy
 
Registriert seit: 09.12.2005
Ort: bei Karlsruhe
Receiver: TF4000-5500-6000-TMS
Beiträge: 5.643
Standard

Zitat:
Zitat von Harvey
Innerhalb von TAP_EventHandler wäre das ein Ersatz.
Was innerhalb von TAP_Main passieren würde weiß ich nicht.
Laut Doku sollte man übrigens TAP_SystemProc in TSR-TAPs nicht aufrufen (also solche, die TAP_EventHandler aufrufen).
Hallo,
wenn man TAP_SystemProc im TAP_Main ausführt wird der Eventhandler ausgeführt, sowohl des aufrufenden TAPs als auch der anderen TAPs.

Man kann auf diese Weise eine TSR schreiben, welches offiziell kein TSR ist. Diese ruft TAP_SystemProc in einer Schleife auf bis im Eventhandler eine Bedingung, z.B. durch Tastendruck , gesetzt wird. Da habe ich mal ein Beispielprogramm zu gesehen.
TAP_SystemProc im Eventhandler aufzurufen ist wahrscheinlich weniger ratsam. Evtl wird der Eventhandler schon wieder aufgerufen, während das TAP eigentlich noch in diesem drinhängt. Habe ich aber nie probiert.
Außerdem, wenn der Eventhandler mal läuft reagiert die FB ja auch wieder.

zu ICTags Vorschlag:
Nach einigen Versuchen scheint mir, dass der Eventhandler aller Autostart-TAPs zum ersten Mal aufgerufen wird, nachdem alle TAP_Mains abgearbeitet worden sind. Diese werden wohl nacheinander so wie sie aufgerufen gestartet.

Was passiert aber nun, wenn ich TAP_SystemProc im TAP_Main verwende?
Wird dann die Eventhandlerroutine schon früher aufgerufen ? Das wäre dann günstig für TAPs, die schon gestartet sind.
Wie verhält sich das mit den TAPs, die noch zu starten sind. Werden diese trotzdem erst nach dem Ende der anderen TAP_Mains gestartet ? Dann würde sich der Start insgesamt verzögern, bei wahrscheinlich besser Bedienbarkeit der FB. Oder führt dies dazu, dass das TAP_Main des nächsten TAPs durch Aufruf von TAP_SystemProc im vorigen TAP gestartet wird.

Mein persönlicher Vorschlag dazu wäre die TAP_Mains extrem kurz zu halten.
Man kann auch die Initialisierung eines TAPs in den Eventhandler legen und evtl über einen längeren Zeitraum verteilen. Dann erreicht man auch eine besser und frühere Reaktion der FB nach dem Starten des Topfs.
Denn wenn man eine lange Routine durch TAP_SystemProc unterbrechen kann, dann kann man sie auch auf mehrere Eventhandlerdurchläufe verteilen.

Vorteil des Vorschlags ist wohl eher, dass man die vorhandenen TAPs leichter umstricken kann.

Gruß,
Happy
__________________
Meine TAPs und Tools

TF5500 PVR (Fw Jan. 2007 P)- 400GB Samsung - AC light 1.05 - Yamaha RX-V 1500
- LAN: Asus WL-500g Deluxe mit ftpd-topfield 0.7.4
TAPs: Quicktimer, Autodelete, Standby, 3PG, Automove, NiceDisplay, PowerRestore, WSS Killer, Eurostirf, Overfly
TV: Sony KDL-46W4500
TF6000 PVR (Fw Okt. 2008)- 160GB Samsung SV1604N
TAPs: iTina, Autodelete, Automove, Autoresume, NiceDisplay, WSS Killer
SRP-2100 (Fw Okt. 2009)
TAPs: SmartEPG, ChangePreview, Autodelete, Automove, BackupSettings,RescueRecs, MySkip, NiceDisplay
Happy ist offline   Mit Zitat antworten
Alt 22.03.2006, 12:22:18   #4
ICTag
Erfahrener Benutzer
 
Registriert seit: 09.12.2005
Ort: Baden-Württemberg
Receiver: Topfield 5000 PVR (and no looking back)
Firmware: Sept 2005ph Firmware wieder
Beiträge: 154
Standard

Zitat:
Zitat von Happy
Vorteil des Vorschlags ist wohl eher, dass man die vorhandenen TAPs leichter umstricken kann.
Das war genau meine Denkrichtung.

Zitat:
Zitat von Happy
Mein persönlicher Vorschlag dazu wäre die TAP_Mains extrem kurz zu halten.
Sehe ich auch so. Das habe ich im Geburtstagkalendar so gemacht und der läuft bei mir seit 3 Tage ohne Probleme (mit TAP_SystemProc nur im Initalizierungsroutine im EventHandler ).

Zitat:
Zitat von Harvey
Laut Doku sollte man übrigens TAP_SystemProc in TSR-TAPs nicht aufrufen (also solche, die TAP_EventHandler aufrufen).
xwiki TAP_SystemProc
Zitat:
Zitat von xwiki
It is legitimate to call this function in a TAP in TSR mode and doing so will not (by itself) cause problems.

If you do this you must be particularly careful to avoid infinite recursion (a call to TAP_SystemProc will re-enter your TAP via TAP_EventHandler, and if that in turn calls TAP_SystemProc and the cycle repeats the Toppy will crash due to a stack overflow).
Das habe ich versucht zu verhindern mit der g_started Abfrage (Punkt 3).
Gruß,
ICTag
__________________
Auto TAPs : Fastskip, Geburtstag, JAG_EPG, Improbox Premium, TF5000 Display, Filer.
Sonstige TAPs: UK OZ Surfer, Plasma EPG,
TAP commander.
ICTag ist offline   Mit Zitat antworten
Antwort

Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:09:18 Uhr.

©2005-2011 TOPFIELD Europe GmbH  | Datenschutz & Nutzungsbedingungen | Impressum

Powered by vBulletin Version 3.8.6 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.