|
Verfasser |
Nachricht |
knopper
Halbprofi
Beiträge: 135
Gruppe: User
Registriert seit: Apr 2010
Status:
Offline
Danke erhalten: 58
|
C, Problem mit PSP_HPRM, HeadPhones/Remote Port
Habe ein kleines Problem beim Abfragen der Fernbedienung (PSP 3004).
Kann zwar (mit C und psphprm.h) problemlos Play/Pause, Forward, Back und Hold abfragen, aber leider
nicht PSP_HPRM_VOL_UP und PSP_HPRM_VOL_DOWN.
Woran liegt das, kennt sich jemand aus?
|
|
20.06.2013 10:02 |
|
|
|
dx3m
Manta
Beiträge: 490
Gruppe: Developer
Registriert seit: Aug 2010
Status:
Abwesend
Danke erhalten: 643
|
RE: C, Problem mit PSP_HPRM, HeadPhones/Remote Port
Kannst du einen Beispielscode posten plus der "LIBS" line von der Makefile?
Kann mir höchstens vorstellen das man für PSP_HPRM_VOL_UP/DOWN Kernelmode benötigt oder ähnliches!
|
|
22.06.2013 16:20 |
|
Folgende User bedanken sich: |
|
knopper
Halbprofi
Beiträge: 135
Gruppe: User
Registriert seit: Apr 2010
Status:
Offline
Danke erhalten: 58
|
RE: C, Problem mit PSP_HPRM, HeadPhones/Remote Port
Hi dx3m, habe schon alles mögliche getestet. Nur die VOL_UP/DOWN Tasten wollen nicht funktionieren. Hier ein Code-Beispiel:
#include <pspuser.h>
#include <pspdebug.h>
#include <pspdisplay.h>
#include <pspsdk.h>
#include <pspctrl.h>
#include <psphprm.h>
#include <string.h>
PSP_MODULE_INFO("Remote Sample", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);
#define printf pspDebugScreenPrintf
int main(void) {
u32 key_new, key_old = 0; int err = 0;
pspDebugScreenInit();
sceCtrlSetSamplingCycle(0);
sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);
while(1) {
SceCtrlData pad; key_new = 0; err = 0;
sceCtrlReadBufferPositive(&pad, 1);
if (pad.Buttons & PSP_CTRL_CROSS) {
break;
}
if (sceHprmIsRemoteExist()) {
err = sceHprmPeekCurrentKey(&key_new);
if ((key_new > 0) && (key_new != key_old)) {
if (key_new == PSP_HPRM_PLAYPAUSE) printf("Play-Pause button pressed\n");
if (key_new == PSP_HPRM_FORWARD) printf("Forward button pressed\n");
if (key_new == PSP_HPRM_BACK) printf("Back button pressed\n");
if (key_new == PSP_HPRM_HOLD) printf("Hold button pressed\n");
if (key_new == PSP_HPRM_VOL_UP) printf("Volume Up button pressed\n");
if (key_new == PSP_HPRM_VOL_DOWN) printf("Volume Down button pressed\n");
}
}
key_old = key_new;
sceDisplayWaitVblankStart();
}
sceKernelExitGame();
return 0;
}
Makefile:
TARGET = remote
OBJS = main.o
USE_PSPSDK_LIBC = 1
INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
LIBS = -lpsphprm
LIBDIR =
LDFLAGS =
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Remote Control Sample
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak
PSP 3004, FW 6.6
Dieser Beitrag wurde zuletzt bearbeitet: 23.06.2013 14:30 von knopper.
|
|
22.06.2013 18:03 |
|
|
|
dx3m
Manta
Beiträge: 490
Gruppe: Developer
Registriert seit: Aug 2010
Status:
Abwesend
Danke erhalten: 643
|
RE: C, Problem mit PSP_HPRM, HeadPhones/Remote Port
Das ganze schonmal im Kernel Mode probiert?
Wenn nein, Probier es mal. Aber "-lpsphprm" ersetzt du dann mit "-lpsphprm_driver" wenn du das im Kernel Mode testest.
Dieser Beitrag wurde zuletzt bearbeitet: 22.06.2013 22:13 von dx3m.
|
|
22.06.2013 22:12 |
|
Folgende User bedanken sich: |
|
knopper
Halbprofi
Beiträge: 135
Gruppe: User
Registriert seit: Apr 2010
Status:
Offline
Danke erhalten: 58
|
RE: C, Problem mit PSP_HPRM, HeadPhones/Remote Port
Leider funzt es auch im Kernel Mode (0x1000) mit lpsphprm_driver nicht. Nach dem Starten der Eboot kommt nur die langweilige Fehlermeldung: Das Spiel konnte nicht gestartet werden. (80020148)
|
|
23.06.2013 09:56 |
|
|
|
dx3m
Manta
Beiträge: 490
Gruppe: Developer
Registriert seit: Aug 2010
Status:
Abwesend
Danke erhalten: 643
|
RE: C, Problem mit PSP_HPRM, HeadPhones/Remote Port
Du kannst keine Kernel Mode programme vom XMB aus starten.
Da musst du ein Module schreiben das im Kernel Mode läuft und sozusagen eine Bridge zwischen Kernel- und Usermode erzeugt.
Die Usermode Anwendung läd dann die "Bridge" in den Kernel worauf dann deine Anwendung selbst zugreifen und Funktionen vom Kernel nutzen kann.
Also:
Usermode <-> "Bridge" <-> Kernel.
Dieser Beitrag wurde zuletzt bearbeitet: 23.06.2013 17:15 von dx3m.
|
|
23.06.2013 17:11 |
|
Folgende User bedanken sich: |
|
knopper
Halbprofi
Beiträge: 135
Gruppe: User
Registriert seit: Apr 2010
Status:
Offline
Danke erhalten: 58
|
RE: C, Problem mit PSP_HPRM, HeadPhones/Remote Port
Habe jetzt mal einen simplen MP3-Code mit den obigen Remote-Funktionen (PSP_HPRM) getestet. Und siehe da, während des Abspielens funktionieren alle Tasten, sogar Laut und Leise, lassen sich auch anzeigen, außer VOL_UP/DOWN. Irgendwie komisch, hardwaremäßig funzt alles, aber (mit C) abfragen kann man die beiden Tasten nicht.
Kann es vielleicht sein, das die Werte (für VOL_UP = 0x10 und VOL_DOWN = 0x20) nur für die PSP 1000 und nicht mehr für die 2000/3000er kompatibel sind?
PSP 3004, FW 6.6
Dieser Beitrag wurde zuletzt bearbeitet: 24.06.2013 19:05 von knopper.
|
|
24.06.2013 18:52 |
|
|
|
knopper
Halbprofi
Beiträge: 135
Gruppe: User
Registriert seit: Apr 2010
Status:
Offline
Danke erhalten: 58
|
RE: C, Problem mit PSP_HPRM, HeadPhones/Remote Port
Problem gelöst!!! Kann jetzt mit der PSP 3000 alle Tasten der Fernbedienung (auch VOL_UP und VOL_DOWN) im Usermode + PRX abfragen.
Usermode
main.c
//HPRM-Buttons-Tester for PSP 3000 by Knopper
#include <pspctrl.h>
#include <pspdebug.h>
#include <pspsdk.h>
#include <pspsysmem.h>
#include <pspuser.h>
#include <string.h>
#define printf pspDebugScreenPrintf
PSP_MODULE_INFO("HPRM-Buttons_Tester", 0, 1, 0); //Usermode
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);
PSP_HEAP_SIZE_KB(2500);
//Headphones buttons
int PLAYPAUSE = 769;
int FORWARD = 772;
int BACK = 776;
int VOL_UP = 784;
int VOL_DOWN = 800;
int HOLD = 896;
//Functions-Import von prx
int getHPRM(void);
int main(void){
pspDebugScreenInit();
sceCtrlSetSamplingCycle(0);
sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);
SceUID modid;
pspDebugScreenInit();
pspDebugScreenPrintf("HPRM-Buttons-Tester. Press X for quit!\n\n");
modid = pspSdkLoadStartModule("myLib.prx", PSP_MEMORY_PARTITION_KERNEL);
if (modid < 0){
pspDebugScreenPrintf("Error 0x%08X loading/starting myLib.prx.\n", modid);
sceKernelDelayThread(5*1000*1000);
return -1;
}
pspDebugScreenPrintf("Press Headphones-Buttons...\n\n");
SceCtrlData pad;
while(1){
int key;
sceCtrlReadBufferPositive(&pad, 1);
if (pad.Buttons & PSP_CTRL_CROSS){
break;
}
key = getHPRM();
if (key > 0) {
if (key == PLAYPAUSE) {printf("PLAY/PAUSE button pressed\n");}
if (key == FORWARD) {printf("FORWARD button pressed\n");}
if (key == BACK) {printf("BACK button pressed\n");}
if (key == VOL_UP){printf("VOLUME_UP button pressed\n");}
if (key == VOL_DOWN){printf("VOLUME DOWN button pressed\n");}
if (key == HOLD) {printf("HOLD button pressed\n");}
}
}
sceKernelExitGame();
return 0;
}
myLib.S
.set noreorder
#include "pspstub.s"
STUB_START "myLib",0x40090000,0x00010005
STUB_FUNC 0x5AC51B78,getHPRM
STUB_END
Makefile
TARGET = HPRMButtonsTester
OBJS = main.o myLib.o
INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
BUILD_PRX = 1
LIBDIR =
LDFLAGS =
LIBS =
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = HPRM_Buttons_Tester
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak
PRX
main.c
#include <pspdebug.h>
#include <psphprm.h>
#include <pspkernel.h>
#include <pspsdk.h>
PSP_MODULE_INFO("myLib", 0x1006, 1, 0); //Kernelmode
PSP_MAIN_THREAD_ATTR(0);
int getHPRM(){
int HPRMsignal = 0;
u32 k1;
k1 = pspSdkSetK1(0);
sceHprmPeekCurrentKey(&HPRMsignal);
pspSdkSetK1(k1);
return HPRMsignal;
}
int module_start(SceSize args, void *argp)
{
return 0;
}
int module_stop()
{
return 0;
}
mylib.exp
PSP_BEGIN_EXPORTS
PSP_EXPORT_START(syslib, 0, 0x8000)
PSP_EXPORT_FUNC_HASH(module_start)
PSP_EXPORT_VAR_HASH(module_info)
PSP_EXPORT_END
#Export our function
PSP_EXPORT_START(myLib, 0, 0x4001)
PSP_EXPORT_FUNC(getHPRM)
PSP_EXPORT_END
PSP_END_EXPORTS
Makefile
TARGET = mylib
OBJS = main.o
INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
PSP_FW_VERSION = 500
BUILD_PRX = 1
PRX_EXPORTS = mylib.exp
USE_KERNEL_LIBC=1
USE_KERNEL_LIBS=1
LIBDIR =
LDFLAGS = -mno-crt0 -nostartfiles
LIBS = -lpsphprm_driver
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak
Wer sich für weitere Infos interessiert:
http://forums.pspslimhacks.com/threads/module-exports-imports.6327/
PSP 3004, FW 6.6
Dieser Beitrag wurde zuletzt bearbeitet: 21.07.2013 14:20 von knopper.
|
|
21.07.2013 13:50 |
|
|
|