Für TAP-Entwickler: Start 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.
Online
Benutzeravatar
Gerti
Nicht mehr bei Topfield-Europe
<b>Nicht mehr bei Topfield-Europe</b>
Beiträge: 15742
Registriert: Fr 9. Dez 2005, 00:16
Receivertyp: Vu+ Uno 4k
Wohnort: Hürth
Kontaktdaten:

#21

Beitrag von Gerti » Do 15. Jun 2006, 22:24

Hi!

Macht es das auch, wenn Du den eigentlichen Aufruf ins IDLE verlegst?

Gruß,
Gerti

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 » Do 15. Jun 2006, 22:42

Gerti hat geschrieben: Macht es das auch, wenn Du den eigentlichen Aufruf ins IDLE verlegst?
Kann ich Dir kurz nach 9 sagen, nach der Aufnahme. :D
: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

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:

#23

Beitrag von Happy » Do 15. Jun 2006, 23:04

Im Idle stürzt es auch ab.
: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

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

#24

Beitrag von Elle4u » Do 15. Jun 2006, 23:07

Oh, oh.

Da bin ich ja mal gespannt, wenn ich versuche es bei mir einzubauen (wird aber noch etwas dauern...) :w00t:
Gruß,
Elle4u

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

#25

Beitrag von DeadBeef » Do 15. Jun 2006, 23:35

Happy hat geschrieben:Sobald ich es aber umschreibe, damit dass TAP auf ein EVT_KEY hin gestartet werden soll, schmiert der Topf beim Aufruf, also beim Drücken der Taste, ab.

Ideen ?
Dann war ich doch zu optimistisch, was den Code-Wrapper angeht. :( Bei ersten Versuchen habe ich einen (bewährten) Code-Wrapper benutzt, aber der Topf stürzte trotzdem ab, weil das $gp Register nach der Rückkehr aus dem Wrapper nicht richtig gesetzt wurde ($gp = 0). Deswegen habe ich beschlossen, das $gp Register selbst zu sichern, was in TAP_Main offensichtlich funktioniert. Vielleicht werden die Register in den Assembleranweisungen anders zugewiesen, wenn der Code in einer anderen Umgebung eingebunden wird. Je nach Wahl des Registers kann dessen Inhalt bei Funktionsaufrufen überschriben werden.
Muß ich wohl weiter forschen ... :thinker:

Ich komme momentan an den Topf nicht ran, aber Du könntest folgendes ausprobieren, falls Du Lust hast:

Code: Alles auswählen

[color=red][b]volatile[/b][/color] dword tapGp = 0;
...
  __asm__ __volatile__ ("or %0,$28,$00\n" [color=red][b]: "=r"(tapGp) :[ /b][/color] );
Das würde den TAP-Wert nicht nur im Register zwischenspeichern, sondern auch auf dem Stack.
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:

#26

Beitrag von Happy » Do 15. Jun 2006, 23:43

DeadBeef hat geschrieben: Ich komme momentan an den Topf nicht ran, aber Du könntest folgendes ausprobieren, falls Du Lust hast:

Code: Alles auswählen

[color=red][b]volatile[/b][/color] dword tapGp = 0;
...
  __asm__ __volatile__ ("or %0,$28,$00\n" [color=red][b]: "=r"(tapGp) :[ /b][/color] );
Das würde den TAP-Wert nicht nur im Register zwischenspeichern, sondern auch auf dem Stack.
Ich habe die beiden Zeilen bei mir mal ersetzt, aber mit gleichem Ergebnis.

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

#27

Beitrag von DeadBeef » Do 15. Jun 2006, 23:43

tapworld hat geschrieben:DeadBeef,

Will this be added into your FW hooks page (or somewhere in your pages)?
I will add it later to the hooks page, once it is stable (there seem to be some issues).
Zuletzt geändert von DeadBeef am Do 15. Jun 2006, 23:49, insgesamt 1-mal geändert.
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 » Do 15. Jun 2006, 23:48

Happy hat geschrieben:Ich habe die beiden Zeilen bei mir mal ersetzt, aber mit gleichem Ergebnis.

Gruß,
Happy
Könntest Du den Exceptiontext hier posten?

Eine weitere Theorie: möglicherweise hat die FW was dagegen, wenn in einem Event-Loop ein weiteres TAP angelegt wird, denn das ändert die TAP-Tabelle.

Was habe ich mir bloß dabei gedacht ... :huh:
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:

#29

Beitrag von Happy » Do 15. Jun 2006, 23:54

DeadBeef hat geschrieben:Könntest Du den Exceptiontext hier posten?

Code: Alles auswählen

TAP_Main = 82A8896C
startTap = 8018A5C4
fwgp= 803926C8

$sp=803ac738
$at=00000000	$v0=00000000	$v1=803926c8	$a0=82a89728
$a1=82a89714	$a2=00000004	$a3=0000000f	$t0=801e7910
$t1=3c1c0000	$t2=00000000	$t3=803ac78c	$t4=82a11b20
$t5=00000000	$t6=803ac6ba	$t7=00000016	$t8=0000000d
$t9=8018b2c4	$s0=0001000c	$s1=00000000	$s2=0001000c
$s3=0000e300	$s4=8018b2c4	$s5=82a88800	$s6=00000005
$s7=82a897d0	$s8=803ac848	$ra=82a888cc	$t0=00000000
$t1=00000000	$gp=803926c8	$k1=82a88904

<<< Unexpected Exception >>>
CAUSE   = 00008408
  EPC = 82a88904
 *EPC   = 8c420000
   SR   = 10000403
badVAddr = 00000000
 task = 0
_runCount=1
lastTask(0) = 0
memory monitor
cmd number = 10

>
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

#30

Beitrag von DeadBeef » Fr 16. Jun 2006, 00:17

Code: Alles auswählen

TAP_Main = [color=blue]82A8896C[/color]
startTap = 8018A5C4
fwgp= [color=red]803926C8[/color]
...
$t1=00000000    $gp=[color=red]803926c8[/color]    $k1=82a88904
...
  EPC = [color=blue]82a88904[/color]
 *EPC   = 8c420000

Es sieht so aus, daß die startTap-Funktion zurückgekehrt ist, aber der Inhalt von $gp immer noch den $gp Wert der Firmware hat. :eek:

PS: Der $gp Wert entspricht nicht der FW in Deiner Signatur. ;)
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:

#31

Beitrag von Happy » Fr 16. Jun 2006, 00:25

DeadBeef hat geschrieben:
PS: Der $gp Wert entspricht nicht der FW in Deiner Signatur. ;)
:p st: :p st:
: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

#32

Beitrag von DeadBeef » Fr 16. Jun 2006, 08:31

Happy hat geschrieben:Sobald ich es aber umschreibe, damit dass TAP auf ein EVT_KEY hin gestartet werden soll, schmiert der Topf beim Aufruf, also beim Drücken der Taste, ab.
Ich kann es nicht nachvollziehen - kein Absturz. Dafür wird bei mir das zu startende TAP nicht ausgeführt, wenn die Funktion aus dem Event-Handler aufgerufen wird. :confused:
Mir ist dabei eine andere unschöne Sache aufgefallen: ich bin mir nicht sicher, ob TAP_Hdd_ChangeDir auch das Arbeitsverzeichnis der FW verändert. Denn wenn nicht, muß das zu startende TAP in dem Arbeitsverzeichnis der FW und nicht dem des TAPs sein.
Grüße
DeadBeef

DeadBeef's TAP Collection

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

#33

Beitrag von DeadBeef » Fr 16. Jun 2006, 12:39

Ich habe ein bisschen experimentiert und folgendes ist dabei rausgekommen.

1. Die Firmware arbeitet tatsächlich in einem anderen Verzeichnis als alle TAPs und zwar in DataFiles. Es wäre echt unpraktisch die zu startenden TAPs dort abzulegen, solange man keinen Weg hat das Arbeitsverzeichnis der FW zu ändern.
2. Absolute Pfade werden von der startTap() Funktion nicht akzeptiert.
3. Folgender Code kann auf meinem Topf sowohl in TAP_Main als auch in TAP_EventHandler aufgerufen werden und funktioniert ohne Probleme:

Code: Alles auswählen

 
void doIt()
{
  volatile dword tapGp = 0;
  dword fwGp = getFwGp();
  // retrieve the address of the start TAP function, it is usually located in 
  // the second megabyte of the firmware
  StartTap startTap = (StartTap)findStartTapFunction((dword*)0x80100000, 0x100000);
  TAP_Print("startTap = %p\n", startTap);
  TAP_Print("starting TAP ...\n");
  if((startTap == NULL) || (fwGp == 0))
  {
    TAP_Print("initialization failed\n");
    return;
  }
  // make sure the current working directory is ProgramFiles
  changeDirectory();
  // Instead of using a code wrapper just save the value of the $gp register
  // and provide the firmware specific $gp value.
  __asm__ __volatile__ ("or %0,$28,$00\n" : "=r"(tapGp) : );
  __asm__ __volatile__ ("or $28,%0,$00\n" : : "r"(fwGp));
  startTap("test.tap");
  // restore the TAP value of $gp
  __asm__ __volatile__ ("or $28,%0,$00\n" : : "r"(tapGp));
 
  TAP_Print("done\n");
}
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:

#34

Beitrag von Happy » Fr 16. Jun 2006, 14:23

DeadBeef hat geschrieben: 3. Folgender Code kann auf meinem Topf sowohl in TAP_Main als auch in TAP_EventHandler aufgerufen werden und funktioniert ohne Probleme:
Hallo,
so gehts jetzt bei mir auch , wenn das TAP in DataFiles liegt.
Einziger Unterschied zu meinem letzten Versuch gestern:
Ich hatte

Code: Alles auswählen

StartTap startTap = NULL
global definiert und im Main die Zuweisung

Code: Alles auswählen

startTap  = (StartTap)findStartTapFunction((dword*)0x80100000, 0x100000);
Dann gibts beim Aufruf den Absturz.

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

#35

Beitrag von DeadBeef » Fr 16. Jun 2006, 18:47

Happy hat geschrieben:Ich hatte

Code: Alles auswählen

StartTap startTap = NULL
global definiert und im Main die Zuweisung

Code: Alles auswählen

startTap  = (StartTap)findStartTapFunction((dword*)0x80100000, 0x100000);
Dann gibts beim Aufruf den Absturz.
Globale Zeiger sind am Übergang in den FW-Kontext nicht gut, weil der Compiler sie meistens über $gp referenziert. Wenn ich mich nicht irre, sollte eine lokale Kopie des globalen Zeigers das Problem lösen. Mit Präfix "volatile" sollte es auf jeden Fall klappen.

Nun muß ich versuchen, das FW-Arbeitsverzeichnis temporär zu "verbiegen".
Grüße
DeadBeef

DeadBeef's TAP Collection

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

#36

Beitrag von Elle4u » Fr 16. Jun 2006, 19:21

Da ich gar nicht verstehe von was ihr da genau redet, wäre es nett wenn ihr mir die funktionierende Libary am Ende zukommen lassen könntet :lol: .


Danke! :up:
Gruß,
Elle4u

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:

#37

Beitrag von Happy » Fr 16. Jun 2006, 19:39

DeadBeef hat geschrieben:Globale Zeiger sind am Übergang in den FW-Kontext nicht gut, weil der Compiler sie meistens über $gp referenziert. Wenn ich mich nicht irre, sollte eine lokale Kopie des globalen Zeigers das Problem lösen. Mit Präfix "volatile" sollte es auf jeden Fall klappen.
Habe beides probiert, die globale Variable volatile zu deklarieren, reicht nicht. Aber mit der lokalen Kopie klappt es.
DeadBeef hat geschrieben: Nun muß ich versuchen, das FW-Arbeitsverzeichnis temporär zu "verbiegen".
Viel Erfolg.

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

#38

Beitrag von DeadBeef » Fr 16. Jun 2006, 19:53

Happy hat geschrieben:Habe beides probiert, die globale Variable volatile zu deklarieren, reicht nicht. Aber mit der lokalen Kopie klappt es.
Ich meinte eher die lokale Kopie mit volatile zu versehen, damit es auch bei eingeschalteter Optimierung klappt. Aber die uns vorliegende Compiler-Version optimiert sowieso nicht.
Grüße
DeadBeef

DeadBeef's TAP Collection

Benutzeravatar
Elle4u
TAP-Chirurg

<div title=Selbsternannter Allesknutscher>TAP-Chirurg</div>
Beiträge: 11971
Registriert: Fr 9. Dez 2005, 16:48
Receivertyp: SRP-2410 (2 TB)
Receiverfirmware: TF-BCPCE 1.11.00 (19.12.2013)
Wohnort: Osburg
Kontaktdaten:

#39

Beitrag von Elle4u » Di 27. Jun 2006, 07:45

Mal ne Frage :oops: :

Seit ihr hier schon irgendwie weiter gekommen???
Funktioniert der TAP-Start nun?

:D
Gruß,
Elle4u

Benutzeravatar
Harvey
iTina-Promoter und Kuhinteressent
iTina-Promoter und Kuhinteressent
Beiträge: 3894
Registriert: So 11. Dez 2005, 22:34
Receivertyp: 0x1388 PVR
Receiverfirmware: 13.09.2005
Wohnort: Planet Erde, Milchstraße

#40

Beitrag von Harvey » Di 27. Jun 2006, 10:58

exTAP verbiegt vor dem Aufruf von tap_start einen Pointer.

Ich bin ziemlich sicher, daß dort in wie auch immer kodierter Form (sind ziemlich tief verschachtelte Unterfunktionen) das Arbeitsverzeichnis drin steckt.

Für die aktuelle Release des TF5x00PVR wäre das

dword *fw_tap_load_data0;
dword *fw_tap_load_data1;
dword *fw_tap_load_data2;

fw_tap_load_data0 = (dword *)0x8038122c; // -25604($gp)
fw_tap_load_data1 = (dword *)0x8037fb38; // -31480($gp)
fw_tap_load_data2 = (dword *)0x8037fb28; // -31496($gp)

*fw_tap_load_data0 = *fw_tap_load_data1;
doit();
*fw_tap_load_data0 = *fw_tap_load_data2;

In der Firmware finde ich das anders, dort wird *fw_tap_load_data0 häufig gesichert (0x80146678), übeschrieben und später wieder zurückgesichert (0x80146684).
Gruss
Harvey

Antworten

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