für Entwickler: Tuner per API
- Erdnussnase
- TAP-Guru
- Beiträge: 7067
- Registriert: Fr 9. Dez 2005, 12:01
Man sollte sowieso so wenig wie möglich in Tap Main machen.
In den Anfängen von QT bekam ich heraus das der gleiche Code dann VIEL länger dauert.
Ich setz mir in Main nur ein Bool den ich im Handler auswerte und der mir sagt das es der allererste Handler Aufruf ist. Dann mache ich (im Handler) alle Initialisierungen, File handling etc....
In den Anfängen von QT bekam ich heraus das der gleiche Code dann VIEL länger dauert.
Ich setz mir in Main nur ein Bool den ich im Handler auswerte und der mir sagt das es der allererste Handler Aufruf ist. Dann mache ich (im Handler) alle Initialisierungen, File handling etc....
->.....
Kein Support oder Fragen zur Registrierung per PN !
http://www.iTiNa.de
?Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit,
aber bei dem Universum bin ich mir noch nicht ganz sicher.?
Albert Einstein
Kein Support oder Fragen zur Registrierung per PN !
http://www.iTiNa.de
aber bei dem Universum bin ich mir noch nicht ganz sicher.?
Albert Einstein
- Happy
- TAP-Guru
- Beiträge: 5718
- Registriert: Fr 9. Dez 2005, 09:32
- Receivertyp: TF4000-5500-6000-TMS
- Wohnort: bei Karlsruhe
- Kontaktdaten:
Das könnte so auch ich geschrieben haben.Erdnussnase hat geschrieben:Man sollte sowieso so wenig wie möglich in Tap Main machen.
In den Anfängen von QT bekam ich heraus das der gleiche Code dann VIEL länger dauert.
Ich setz mir in Main nur ein Bool den ich im Handler auswerte und der mir sagt das es der allererste Handler Aufruf ist. Dann mache ich (im Handler) alle Initialisierungen, File handling etc....
Leider haben sich viele ND-User beklagt, dass das Display so spät angesteuert wird. Dies wiederum liegt daran, dass das TAP_Main von IB ca. 10-20 Sekunden dauert und so erst recht spät der Eventhandler zum ersten Mal aufgerufen wird. Wir hatte damals auch Kontakt per PN deswegen und Du meinetst, dass das Laden der Logogs schon eine Weile geht.
Daher wird nun alle Info schon einmal im TAP_Main gesammelt und im Display dargestellt.
Das mit der Tunerabfrage werde ich jetzt irgendwie ausklammern im TAP_Main.
Seltsam finde ich den Absturz aber doch, zumal ein Aufruf von TAP_GetCurrentChannel, von dem die Tunerabfrage ja abgekupfert wird, einwandfrei funktioniert.
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
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
Jetzt, wo Du es sagst, klingelt es bei mir - da war doch was. Ich glaube mich zu erinnern, daß es bei anderen FW-Hooks ähnliche Probleme gegeben hat. D.h. wenn man sie aus TAP_Main aufgerief, frohr der Topf ein. Ich habe es nicht weiterverfolgt, weil sich bis jetzt niemand beklagt hat und weil es im Idle-Event einwandfrei funktionierte. Mich wundert es auch, daß es bei einer zu 99%-kopierten Funktion Probleme gibt, wobei die Exception-Daten nicht wirklich zum TAP-Code passen:Happy hat geschrieben:Das Ergebnis ist, dass das man die Funktion nicht im TAP_Main aufrufen kann, dann kommt es zum Absturz.
Im Idle-Event scheint es stabil zu sein.
Code: Alles auswählen
EPC = 82154cbc
*EPC = 8de70000
Es könnte sich um eine Topfield Code-Protection ;-) oder einen Bug in der Cache-/Speicherverwaltung handeln, der in TAP_Main zuschlägt, weil die TAP-Umgebung noch nicht vollständig initialisiert wurde. Letzteres könnte erklären, warum der Hook in Verbindung mit anderen API-Aufrufen funktioniert.
Ich werde es mir am langen WE genauer anschauen.
- Happy
- TAP-Guru
- Beiträge: 5718
- Registriert: Fr 9. Dez 2005, 09:32
- Receivertyp: TF4000-5500-6000-TMS
- Wohnort: bei Karlsruhe
- Kontaktdaten:
Hallo,DeadBeef hat geschrieben:Die EPC-Adresse könnte schon dem TAP gehören. Allerdings konnte ich den Instruction-Code 0x8de7000, der von dieser Adresse gelesen wurde, nicht im TAP finden.Code: Alles auswählen
EPC = 82154cbc *EPC = 8de70000
habe noch die beiden verlangten Adressen vergessen, auch in der Email:
die Adresse der Funktion ist 82154ca0, also kurz vor der obigen Adresse
Das TAP fängt hier an: _tap_startAddr= 82cd0000
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
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
Ich bin noch nicht dahinter gekommen, was die eigentliche Ursache für das Verhalten in TAP_Main ist.
<Hypothese-Modus>
Ich habe den Verdacht, daß der kopierte TAP_GetCurrentChannel-Code zwar im Datencache liegt, aber weder im Hauptspeicher noch im Instruction-Cache, was zu solchen Nebeneffekten führt. Fügt man einen Funktionsaufruf zwischen dem Kopieren und dem Aufruf des Code-Wrappers ein, wird der Datencache geflusht und der Aufruf führt nicht zum Absturz.
</Hypothese-Modus>
Ich werde eine CachFlush-Funktion implementieren und ausprobieren.
<Hypothese-Modus>
Ich habe den Verdacht, daß der kopierte TAP_GetCurrentChannel-Code zwar im Datencache liegt, aber weder im Hauptspeicher noch im Instruction-Cache, was zu solchen Nebeneffekten führt. Fügt man einen Funktionsaufruf zwischen dem Kopieren und dem Aufruf des Code-Wrappers ein, wird der Datencache geflusht und der Aufruf führt nicht zum Absturz.
</Hypothese-Modus>
Ich werde eine CachFlush-Funktion implementieren und ausprobieren.
- FireBird
- Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
- Beiträge: 28933
- Registriert: Fr 9. Dez 2005, 09:59
- Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k - Wohnort: Wien
Servus DeadBeef,
die Lösung mag grundsätzlich interessant sein, aber ist es nicht ein ziemlicher Overkill für diese Info? Wenn man die TAP_Channel_GetCurrent nach dem einzigen „lw $??,-????($gp)“ durchsucht, hat man den Pointer auf einen Pointer auf die Struktur. Damit umgehe ich den Krampf mit den verschiedenen Speicherbereichen.
MfG. Alex
die Lösung mag grundsätzlich interessant sein, aber ist es nicht ein ziemlicher Overkill für diese Info? Wenn man die TAP_Channel_GetCurrent nach dem einzigen „lw $??,-????($gp)“ durchsucht, hat man den Pointer auf einen Pointer auf die Struktur. Damit umgehe ich den Krampf mit den verschiedenen Speicherbereichen.
MfG. Alex
In diesem konkreten Fall kann man den leichteren Weg gehen. FW-Funktionen, die ohne einen Code-Wrapper nicht auskommen, sind prinzipiell betroffen und benötigen einen Workaround, wie auch immer der aussehen mag.FireBird hat geschrieben:Wenn man die TAP_Channel_GetCurrent nach dem einzigen lw $??,-????($gp) durchsucht, hat man den Pointer auf einen Pointer auf die Struktur. Damit umgehe ich den Krampf mit den verschiedenen Speicherbereichen.
FireBird hat geschrieben:Wenn man die TAP_Channel_GetCurrent nach dem einzigen lw $??,-????($gp) durchsucht, hat man den Pointer auf einen Pointer auf die Struktur.
Man muß von den Bits nur ein paar Schritte zurückgehen und schon sieht man das ganze Bild!
Inspiriert von dieser Idee habe ich die Funktion umgeschrieben. Happy hat sie getestet und für gut befunden. Der Code dazu ist im Anhang.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- FireBird
- Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
- Beiträge: 28933
- Registriert: Fr 9. Dez 2005, 09:59
- Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k - Wohnort: Wien
Hi,
falls es für jemanden brauchbar ist, es funktioniert auch der umgekehrte Weg. Der aus der Firmware herausgeklaubte Pointer zeigt ja auf eine im Speicher befindliche Kopie des EEPROMs. Setzt man das Tuner-Byte, so schaltet der Topf (zumindest mein MP) aktiv auf diesen Tuner um. Anbei ein Beispiel.
MfG. Alex
falls es für jemanden brauchbar ist, es funktioniert auch der umgekehrte Weg. Der aus der Firmware herausgeklaubte Pointer zeigt ja auf eine im Speicher befindliche Kopie des EEPROMs. Setzt man das Tuner-Byte, so schaltet der Topf (zumindest mein MP) aktiv auf diesen Tuner um. Anbei ein Beispiel.
MfG. Alex
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von FireBird am Sa 24. Jun 2006, 12:17, insgesamt 1-mal geändert.
Ein netter Nebeneffekt! Das wollte ich auch mal ausprobieren, aber habe irgendwie vergessen ...FireBird hat geschrieben:Hi,
falls es für jemanden brauchbar ist, es funktioniert auch der umgekehrte Weg. Der aus der Firmware herausgeklaubte Pointer zeigt ja auf eine im Speicher befindliche Kopie des EEPROMs. Setzt man das Tuner-Byte, so schaltet der Topf (zumindest mein MP) aktiv auf diesen Tuner um. Anbei ein Beispiel.
Beim 5000er ändert sich zwar sofort die Tuneranzeige in der Kanalliste und in der Infobox, aber es wird nicht auf den anderen Tuner umgeschaltet. Es funktioniert nur, wenn man nach SetTuner() noch die API-Funktion TAP_Channel_Start() für den aktuellen Kanal aufruft. Ohne TAP_Channel_Start() schaltet er den Tuner nur um, wenn man die Kanalliste öffnet und Exit wieder schließt.
- FireBird
- Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
- Beiträge: 28933
- Registriert: Fr 9. Dez 2005, 09:59
- Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k - Wohnort: Wien
Jetzt weis ich endlich, wo das Master im Piece steckt.t3xi hat geschrieben:Beim 5000er ändert sich zwar sofort die Tuneranzeige in der Kanalliste und in der Infobox, aber es wird nicht auf den anderen Tuner umgeschaltet. Es funktioniert nur, wenn man nach SetTuner() noch die API-Funktion TAP_Channel_Start() für den aktuellen Kanal aufruft. Ohne TAP_Channel_Start() schaltet er den Tuner nur um, wenn man die Kanalliste öffnet und Exit wieder schließt.
Das TAP_Channel_Start ist jetzt im Tuner-Beispiel mit drinnen.