für Entwickler: Tuner per API

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.
Benutzeravatar
Erdnussnase
TAP-Guru
TAP-Guru
Beiträge: 7067
Registriert: Fr 9. Dez 2005, 12:01

#21

Beitrag von Erdnussnase » Mo 12. Jun 2006, 13:29

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....
:type: ->.....
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

Benutzeravatar
Happy
TAP-Guru
TAP-Guru
Beiträge: 5718
Registriert: Fr 9. Dez 2005, 09:32
Receivertyp: TF4000-5500-6000-TMS
Wohnort: bei Karlsruhe
Kontaktdaten:

#22

Beitrag von Happy » Mo 12. Jun 2006, 13:42

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....
Das könnte so auch ich geschrieben haben. :D

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
:type: 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

DeadBeef
TAP-Guru
TAP-Guru
Beiträge: 392
Registriert: So 25. Dez 2005, 11:27

#23

Beitrag von DeadBeef » Mo 12. Jun 2006, 19:08

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.
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:

Code: Alles auswählen

EPC = 82154cbc
*EPC = 8de70000
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.

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.
Grüße
DeadBeef

DeadBeef's TAP Collection

Benutzeravatar
Happy
TAP-Guru
TAP-Guru
Beiträge: 5718
Registriert: Fr 9. Dez 2005, 09:32
Receivertyp: TF4000-5500-6000-TMS
Wohnort: bei Karlsruhe
Kontaktdaten:

#24

Beitrag von Happy » Mo 12. Jun 2006, 19:17

DeadBeef hat geschrieben:

Code: Alles auswählen

EPC = 82154cbc
*EPC = 8de70000
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.
Hallo,

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
:type: 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

DeadBeef
TAP-Guru
TAP-Guru
Beiträge: 392
Registriert: So 25. Dez 2005, 11:27

#25

Beitrag von DeadBeef » So 18. Jun 2006, 19:56

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.
Grüße
DeadBeef

DeadBeef's TAP Collection

Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Beiträge: 28790
Registriert: Fr 9. Dez 2005, 09:59
Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k
Wohnort: Wien

#26

Beitrag von FireBird » So 18. Jun 2006, 21:15

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

DeadBeef
TAP-Guru
TAP-Guru
Beiträge: 392
Registriert: So 25. Dez 2005, 11:27

#27

Beitrag von DeadBeef » Mo 19. Jun 2006, 18:34

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.
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.
Grüße
DeadBeef

DeadBeef's TAP Collection

DeadBeef
TAP-Guru
TAP-Guru
Beiträge: 392
Registriert: So 25. Dez 2005, 11:27

#28

Beitrag von DeadBeef » Di 20. Jun 2006, 20:29

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.

:thanks:

Man muß von den Bits nur ein paar Schritte zurückgehen und schon sieht man das ganze Bild!

Inspiriert von dieser Idee :D 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.
Grüße
DeadBeef

DeadBeef's TAP Collection

Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Beiträge: 28790
Registriert: Fr 9. Dez 2005, 09:59
Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k
Wohnort: Wien

#29

Beitrag von FireBird » Sa 24. Jun 2006, 00:16

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

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.

DeadBeef
TAP-Guru
TAP-Guru
Beiträge: 392
Registriert: So 25. Dez 2005, 11:27

#30

Beitrag von DeadBeef » Sa 24. Jun 2006, 11:27

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.
Ein netter Nebeneffekt! :hello: Das wollte ich auch mal ausprobieren, aber habe irgendwie vergessen ... :thinker:
Grüße
DeadBeef

DeadBeef's TAP Collection

Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Beiträge: 28790
Registriert: Fr 9. Dez 2005, 09:59
Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k
Wohnort: Wien

#31

Beitrag von FireBird » Sa 24. Jun 2006, 11:29

DeadBeef hat geschrieben:Das wollte ich auch mal ausprobieren, aber habe irgendwie vergessen ... :thinker:
Ja, trotz elend langer ToDo-Listen gibt es immer noch ein "Da war doch noch was?.... :thinker: " :D :

t3xi
TAP-Guru
TAP-Guru
Beiträge: 1499
Registriert: Mo 16. Jan 2006, 13:35
Receivertyp: 5^4*2^3

#32

Beitrag von t3xi » Sa 24. Jun 2006, 11:35

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.

DeadBeef
TAP-Guru
TAP-Guru
Beiträge: 392
Registriert: So 25. Dez 2005, 11:27

#33

Beitrag von DeadBeef » Sa 24. Jun 2006, 11:44

Man müßte noch klären, ob laufende Aufnahmen von solchen Manipulationen betroffen wären.
Grüße
DeadBeef

DeadBeef's TAP Collection

t3xi
TAP-Guru
TAP-Guru
Beiträge: 1499
Registriert: Mo 16. Jan 2006, 13:35
Receivertyp: 5^4*2^3

#34

Beitrag von t3xi » Sa 24. Jun 2006, 11:53

Ich hab's gerade getestet. Der Tuner wurde nicht umgeschaltet und die Aufnahme war fehlerfrei. :)

Benutzeravatar
FireBird
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Suspekter verdächtiger Zauberküchenchef, TAP & Firmware-Guru
Beiträge: 28790
Registriert: Fr 9. Dez 2005, 09:59
Receivertyp: SRP-2401CI+ TFIR
vu+ Duo 4k
Wohnort: Wien

#35

Beitrag von FireBird » Sa 24. Jun 2006, 12:19

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.
Jetzt weis ich endlich, wo das Master im Piece steckt. :D

Das TAP_Channel_Start ist jetzt im Tuner-Beispiel mit drinnen.

Antworten

Zurück zu „TF 5x00/6000 PVR TAP“