Antwort schreiben  Thema schreiben 
Verfasser Nachricht
dx3m
Manta
*


Beiträge: 490
Gruppe: Developer
Registriert seit: Aug 2010

Status: Abwesend
Danke erhalten: 643
Beitrag: #1
xPSP  Plugin problem beim Boot

Hey leute,

Kleine frage. Ich hab ein Plugin geschrieben und via sceCtrlPeekBufferPositive die CTRL angesprochen. Das ganze hab ich in einen seperaten Thread und dort läuft eine while schleife..

Mein Problem ist das die PSP booted und dann hängen bleibt und erst wieder etwas macht wenn ich die taste die ich definiert habe gedrückt wird!

Edit: Hab was vergessen.. Es sollte so sein das die PSP verwendbar ist und wenn dann diese bestimmte taste gedrückt wird die funktion macht!

Hoffe ihr könnt mir helfen Smile

Dieser Beitrag wurde zuletzt bearbeitet: 22.08.2010 19:09 von dx3m.

22.08.2010 19:08
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
anmabagima
Ex-Developer
****


Beiträge: 348
Gruppe: User
Registriert seit: Dec 2009

Status: Offline
Danke erhalten: 530
Beitrag: #2
xPSP  RE: Plugin problem beim Boot

Hi,

so ganz ohne Code-Beispiel ist das schwer zu sagen was du falsch machst...meine Vermutung ist, dass dein Code etwa so aussieht:

PHP-Code:
while (1){
sceCtrlReadBufferPositive(&pad1);
if (
pad.Button &ampPSP_CTRL_CROSS) {
...
mach irgendwas
break;
}


Das oft gemachte Problem ist, dass diese Schleife die PSP komplett blockiert das in dem Kooperativen-Thread-Modell kein anderer Thread mehr an die Reihe kommt. Um das sicherzustellen muss der laufende Thread immer kurz in den "Schlafmodus" versetzt werden. Das geht über:

PHP-Code:
sceKernelDelayThread(10000); 


Der Code sollte also so aussehen:

PHP-Code:
while (1){
sceCtrlReadBufferPositive(&pad1);
if (
pad.Button &ampPSP_CTRL_CROSS) {
...
mach irgendwas
break;
}
sceKernelDelayThread(10000);

23.08.2010 07:50
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
dx3m (Aug-23-2010)
dx3m
Manta
*


Beiträge: 490
Gruppe: Developer
Registriert seit: Aug 2010

Status: Abwesend
Danke erhalten: 643
Beitrag: #3
xPSP  RE: Plugin problem beim Boot

Ja ich hab die While schleife durchlaufen lassen :/

Hier der falsche code der die PSP aufhängen lässt:

Code:
int main_thread(SceSize args, void *argp)
{
    sceKernelDelayThread(3*1000*1000);
    SceCtrlData pad;
    while(1)
    {
        sceCtrlPeekBufferPositive(&pad, 1);
        if((pad.Buttons & PSP_CTRL_LTRIGGER) && (pad.Buttons & PSP_CTRL_START))
        {
            //Command!
        }
    }
    return 0;
}


Ich danke dir nochmal Smile

23.08.2010 20:50
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
HacKmaN
Ex-Developer
*


Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009

Status: Offline
Danke erhalten: 3319
Beitrag: #4
RE: Plugin problem beim Boot

Es gibt noch 2 Möglichkeiten die viel, viel, viel einfacher sind.
1. Du kannst vshCtrlReadBufferPositive hooken

Code:
int (* vshCtrlReadBufferPositive_Real) (SceCtrlData *pad, int count) = NULL;
int vshCtrlReadBufferPositive_Patch(SceCtrlData *pad, int count)
{
    int ret = vshCtrlReadBufferPositive_Real(pad, count);
    if(pad->Buttons & (PSP_CTRL_START | PSP_CTRL_RTRIGGER))
    {
        // mach irgendwas
    };
    
    return ret;
};

// bla bla bla
u32 addr = 0;
addr = sctrlHENFindFunction("sceVshBridge_Driver", "sceVshBridge", 0xC6395C03);
if(addr <= 0)
   // Fehler, nicht weiter machen

vshCtrlReadBufferPositive_Real = (void *)addr;
sctrlHENPatchSyscall(addr, vshCtrlReadBufferPositive_Patch);


2. Du kannst mit sceCtrlRegisterButtonCallback nen Callback aktivieren. Die Funktion wird aber nicht vom pspsdk hinzugefügt, deshalb musst du sie selber linken:

Code:
int (* sceCtrlRegisterButtonCallback) (int no, unsigned int mask, void(*) (int, int, void *), void *arg) = NULL;

int callback_func(int *a0, int *a1, void *a2)
{
    // mach irgendwas
};

// bla bla bla
sceCtrlRegisterButtonCallback = (void *)sctrlHENFindFunction("sceController_Service", "sceCtrl_driver", 0x5c56c779);

// bla bla bla
sceCtrlRegisterButtonCallback(0, PSP_CTRL_LTRIGGER | PSP_CTRL_START, (void *)callback_func, NULL);
// ich weiß nicht ob die Funktion so einfach mit mehreren Tasten funktioniert... sollte sie aber (falls sie einfach die Variable in der die Tasten sind per bitweißem AND prüft)


Beispiel warum es funktionieren sollte:
In einer SceCtrlData->Buttons Variable sind die Tasten PSP_CTRL_LTRIGGER, PSP_CTRL_RTRIGGER, PSP_CTRL_CROSS und PSP_CTRL_START:

Code:
0000 0000 0000 0001 0000 0000 // LTRIGGER
| 0000 0000 0000 0010 0000 0000 // RTRIGGER
| 0000 0000 0100 0000 0000 0000 // CROSS
| 0000 0000 0000 0000 0000 1000 // START
-----------------------------------------------
  0000 0000 0100 0011 0000 1000


Die Bit-Maske mit der geprüft wird (LTRIGGER und START):

Code:
0000 0000 0000 0001 0000 0000 // LTRIGGER
| 0000 0000 0000 0000 0000 1000 // START
-----------------------------------------------
  0000 0000 0000 0001 0000 1000


Jetzt wird geprüft (mit bitweißem AND):

Code:
0000 0000 0100 0011 0000 1000
& 0000 0000 0000 0001 0000 1000
----------------------------------
  0000 0000 0000 0001 0000 1000


-> Test erfolgreich, da Ergebnis gleich Test-Maske

Dieser Beitrag wurde zuletzt bearbeitet: 24.08.2010 11:46 von HacKmaN.

24.08.2010 11:37
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
dx3m (Jul-5-2012)
Antwort schreiben  Thema schreiben 

Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
xPSP LUA - hilfe beim coden benötigt SIM sk 23 4.860 06.02.2012 17:37
Letzter Beitrag: duLouser
xPSP (LUA) Problem beim PSP Quiz pandoraboy 7 2.113 23.07.2011 17:01
Letzter Beitrag: secret
xPSP Plugin-Dev-TUT oder Sample? vielesysteme 5 1.994 07.07.2011 13:55
Letzter Beitrag: vielesysteme
xPSP PSP stürzt ab beim Laden der EBOOT Arktos 4 2.728 29.06.2011 14:05
Letzter Beitrag: Arktos
xPSP Hold Plugin für 6.39?? AzrayiL 3 1.978 21.06.2011 00:33
Letzter Beitrag: AzrayiL

Druckversion anzeigen
Thema einem Freund senden
Thema abonnieren | Thema zu den Favoriten hinzufügen




» zum Seitenanfang